在 awk 程序中使用导出变量作为文件名的一部分

在 awk 程序中使用导出变量作为文件名的一部分

我在我的个人资料中设置了一个export X25DATAF=/home/Bob/X25/Datafiles,这就是我执行echo $X25DATAF.

我想用程序中的 2 个位置替换/home/Bob/X25/Datafiles下面的。但是,我无法让它工作(即:)。这样,我所要做的就是将 路径设置为我运行该程序(以及其他类似程序)的系统上的路径。awk$X25DATAFawk$X25DATAF/ALL_SW_DB.txtexportawk

awk -F"\t" ' 
FILENAME=="Sites1" {
  cllina[$0]=$0
}
FILENAME=="/home/bob/X25/DataFiles/ALL_SW_DB.txt" {
  swclli=hostclli=""
  swclli=substr($7,1,8)
  hostclli=substr($3,1,8)
  fclli[hostclli]++
  fclli[swclli]++

  if(hostclli==cllina[hostclli]) {
    if(swclli!=hostclli) {
      printf"REM|%s|%s|%s|%s|%s|%s|%s|%s|%s-%s\n",hostclli,$4,$3,$6,$9,$7,$12,$13,$5,$14 >>"host_remote"
    }
   }

  if(swclli==cllina[swclli]) {
      printf"HOST|%s|%s|%s|%s|%s|%s|%s|%s|%s-%s\n",swclli,$4,$3,$6,$9,$7,$12,$13,$5,$14 >>"host_remote"
    }
 }
 END{
  for(x in cllina)
    if(fclli[x]=="") printf"%s\n",x >"site1.err"
}' Sites1 /home/bob/X25/DataFiles/ALL_SW_DB.txt

答案1

像往常一样,构造FNR==NR(文件行号等于整个行号)用于第一个文件和next跳过第二个文件指令的操作:

awk -F'\t' -v OFS='|' '
    FNR==NR{
        cllina[$0]=1
        next
    }
    {
        swclli=hostclli=""
        fclli[swclli]++
    }
    cllina[hostclli] && swclli!=hostclli{
        print "REM",hostclli,$4,$3,$6,$9,$7,$12,$13,$5,$14
    }
    cllina[swclli]{
        print "HOST",swclli,$4,$3,$6,$9,$7,$12,$13,$5,$14
    }
    }' Sites1 /home/bob/X25/DataFiles/ALL_SW_DB.txt >>host_remote

或查看对您问题的评论。

答案2

这是一个更简单的例子。我想将 2 个实例替换为我的个人资料中的( )/home/Bob/X25/DataFiles导出。如果我能让它在这么简单的情况下工作,我就可以修改我的 real .X25DATAFexport X25DATAF=/home/Bob/X25/DataFilesawkawk

$ cat test1
test1_data
test1a_data
test1b_data

Bob@Bob-PC ~/X25/Scott/TEST/TEST1

$ cat /home/Bob/X25/DataFiles/test2
test2_data

Bob@Bob-PC ~/X25/Scott/TEST/TEST1

$ cat gettestfiles

文件 1test11 有 3 条记录test1_datatest1a_data并且与运行的test1b_data目录位于同一目录中。awk

文件test2只有 1 条记录test2_data并且位于/home/Bob/X25/DataFiles目录中。

awk -F"_" '
FILENAME=="test1" {
  print $1 " " $2
}
FILENAME=="/home/bob/X25/DataFiles/test2" {
print $0
}
END{ }' test1 /home/bob/X25/DataFiles/test2

Bob@Bob-PC ~/X25/Scott/TEST/TEST1

$ gettestfiles
test1 data
test1a data
test1b data
test2_data

Bob@Bob-PC ~/X25/Scott/TEST/TEST1

$

相关内容