如何比较两个文件以获得预期结果

如何比较两个文件以获得预期结果

文件A

Name|Dawson|Age|22|Stream|EEE
Name|Deepak|Stream|Mech
Name|Aruna|Age|20|Stream|Bio-tech

文件 B

Name|Age|Stream

预期输出

Name|Age|Stream
Dawson|22|EEE
Deepak||Mech
Aruna|20|Bio-tech

我想将文件 A 的第 1 列与文件 B 的第 1 列进行比较,如果匹配则必须拉第 2 列,否则应拉空值。

答案1

如果将每对用竖线分隔的字段作为键值映射到哈希(或关联数组)中,则可以相当轻松地进行查找,例如

awk -F'[|]' '
  NR==FNR {
    print; 
    n = split($0,keys); 
    next
  } 
  {
    delete a; 
    for(i=1;i<NF;i+=2) a[$i]=$(i+1); 
    for(k=1;k<n;k++) printf "%s|", a[keys[k]]; 
    print a[keys[n]]
  }
' FileB FileA

在 perl 中映射更简洁

perl -F'[|]' -lpe '
  BEGIN{@keys = qw(Name Age Stream); print join "|", @keys} 
  (%h) = @F; $_ = join "|", map { $h{$_} } @keys
' FileA

(获取方式@keys留作FileB练习)。

相关内容