AWK比较两个文件、匹配第一个字段、粘贴数据等等



我有这个脚本,它用于比较两个文件中的第一个字段,我希望它忽略案例,尝试添加一行IGNORECASE=1;但似乎不起作用,

你能告诉我如何忽略案例吗?

BEGIN {
   FS=OFS=";"
}
FNR==NR {
   array[$1]=$2
   next
}
{
   if ($1 in array) { 
      print $1";" array[$1]";" $2
   }
   else {
      if ($2 in values) {
         print  $1";" "only_at_" FILENAME ";" $0 " same path    as " values[$2]
      }
      else {
         print  $1";" "only_at_" FILENAME ";" $0 " no path  found"
      }
   }
   values[$2]=$1
}

假设我有

File1

\FILE48bucan-CFAN_Subcommittees;\SERVER24dfsSharedcanCFAN Subcommittees

File2

\file48bucan-CFAN_Subcommittees;/fs8_100g/FILE48/BU/can/CFAN Subcommittees
\FILE58userhome_e;/fs1_100g/FILE58/userhome

预期输出

\FILE48bucan-CFAN_Subcommittees;\SERVER24dfsSharedcanCFAN Subcommittees;/fs8_100g/FILE48/BU/can/CFAN Subcommittees
\MLISFILE58userhome_e;only_at_file2;\MLISFILE58userhome_e;/fs1_100g/MLISFILE58/userhome no path found

使用join命令非常简单

join -t';' -i -j 1 -o 1.1,1.2,2.2 File1 File2

使用";"作为字段分隔符,不区分大小写地连接字段1上的两个文件,并输出文件1中的第一个和第二个字段以及文件2中的第二个域。

如果你真的想要awk,这将做同样的事情:

awk '
   BEGIN {FS=OFS=";"} 
   NR==FNR {key[tolower($1)] = $0; next} 
   tolower($1) in key {print key[tolower($1)], $2}
 ' file1 file2

最新更新