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

时间:2012-09-15 16:50:35

标签: text 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中

\\FILE48\bucan-CFAN_Subcommittees;\\SERVER24\dfs\Shared\can\CFAN Subcommittees

文件2

\\file48\bucan-CFAN_Subcommittees;/fs8_100g/FILE48/BU/can/CFAN Subcommittees
\\FILE58\userhome_e;/fs1_100g/FILE58/userhome

预期输出

\\FILE48\bucan-CFAN_Subcommittees;\\SERVER24\dfs\Shared\can\CFAN Subcommittees;/fs8_100g/FILE48/BU/can/CFAN Subcommittees
\\MLISFILE58\userhome_e;only_at_file2;\\MLISFILE58\userhome_e;/fs1_100g/MLISFILE58/userhome no path found

1 个答案:

答案 0 :(得分:1)

使用join命令

非常简单
join -t';' -i -j 1 -o 1.1,1.2,2.2 File1 File2

使用“;”作为字段分隔符,不区分大小写地连接字段1上的两个文件,并从file1输出第一个和第二个字段,从file2输出第二个字段。

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

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