第一档
D07 AAS@qqq
B82 GG^333
D84 GG@WW
F59 LL$$EE
第二档
D84 /usr/ss
F59 /usr/jh
B82 /usr/kk
D07 /usr/ks
输出应为
D84 GG@WW /usr/ss
F59 LL$$EE /usr/jh
B82 GG^333 /usr/kk
D07 AAS@qqq /usr/ks
基本上,我想将第一个文件的数据排序为w.r.t到第二个文件
我尝试过:
BEGIN {
FS = OFS = "\t";
}
NR==FNR {
Values[$1+0] = $2;
next;
}
{
$1 = $1 OFS ($1+0 in Values ? Values[$1+0] : "");
print $0;
}
' 1stfile 2ndfile
任何人都可以提供任何简单的解决方案来实现这一目标吗?
答案 0 :(得分:1)
如果您愿意对文件进行排序然后使用bash join
$ ll
file1
file2
$ cat file1
D07 AAS@qqq
D82 GG^333
D84 GG@WW
D59 LL$$EE
$ cat file2
D84 /usr/ss
D59 /usr/jh
D82 /usr/kk
D07 /usr/ks
$ sort -n file1 > file1a
$ sort -n file2 > file2a
$ cat file1a
D07 AAS@qqq
D59 LL$$EE
D82 GG^333
D84 GG@WW
$ cat file2a
D07 /usr/ks
D59 /usr/jh
D82 /usr/kk
D84 /usr/ss
$ join file1a file2a > file3
$ cat file3
D07 AAS@qqq /usr/ks
D59 LL$$EE /usr/jh
D82 GG^333 /usr/kk
D84 GG@WW /usr/ss
答案 1 :(得分:0)
with perl:
perl -nle '/(.*?)\s+(.*)/&&($h{$1}[$t]=$2);eof&&$t++;END{while(($k,$v)=each%h){print"$k @{$v}"}}' 1stfile 2ndfile