文件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
练习)。