我有两个文件:
File1 12 abc 34 cde 42 dfg 11 df 9 e File2 23 abc 24 gjr 12 dfg 8 df
File1 File2 12 23 abc 42 12 dfg 11 8 df 34 NA cde 9 NA e NA 24 gjr
我怎样才能做到这一点?
我试过这样的:
cat File* >> tmp; sort tmp | uniq -c | awk '{print $2}' > column2; for i in $(cat column2); do grep -w "$i" File*
但这就是我被困的地方……
不知道如何在greping之后我应该逐列组合文件&写NA缺少值的地方.
希望有人可以帮助我.
解决方法
由于我用bash 3.2运行为sh(没有进程替换为sh),我使用了两个临时文件来准备好与join一起使用的数据:
$sort -k2b File2 > f2.sort $sort -k2b File1 > f1.sort $cat f1.sort 12 abc 34 cde 11 df 42 dfg 9 e $cat f2.sort 23 abc 8 df 12 dfg 24 gjr $join -1 2 -2 2 -o 1.1,2.1,0 -a 1 -a 2 -e NA f1.sort f2.sort 12 23 abc 34 NA cde 11 8 df 42 12 dfg 9 NA e NA 24 gjr $
通过进程替换,您可以编写:
join -1 2 -2 2 -o 1.1,0 -a 1 -a 2 -e NA <(sort -k2b File1) <(sort -k2b File2)
如果您希望数据格式不同,请使用awk对输出进行后处理:
$join -1 2 -2 2 -o 1.1,0 -a 1 -a 2 -e NA f1.sort f2.sort | > awk '{ printf "%-5s %-5s %s\n",$1,$2,$3 }' 12 23 abc 34 NA cde 11 8 df 42 12 dfg 9 NA e NA 24 gjr $