我有一个298行和2列(file1)的文件。我有48个不同长度的文件(2-298行),有6列,其中第1列和第2列与file1相同。我想通过粘贴文件2-50中第4列的数据来附加file1,只有两列与文件1匹配,这样最终的附加文件将包含来自file1的列1和2以及来自文件2-50的后48列(298行文件,50列)。如果在文件2-50中找不到值,我想要NA。
文件1:
1 1234
1 48687
2 1234
2 987365
3 97857
file2的:
1 12 234 57
1 1234 3547 72
2 1234 245 17
file3的:
1 1234 249 10
1 48687 250 9
附加文件
1 1234 72 10 file4 file5....
1 48687 NA 9 file4 file5...
答案 0 :(得分:1)
您可以尝试以下脚本:
#! /bin/bash
fn=($(awk 'BEGIN{ for (i=1; i<=49;i++) {print "file"i}}'))
awk -f a.awk ${fn[@]} > append.txt
其中a.awk
是:
BEGIN {
N=ARGC-2
}
{
key=$1 OFS $2
}
NR==FNR {
a[key]++
next
}
FNR==1 {j++}
{
b[key,j]=$4
}
END {
for (i in a) {
printf "%s%s", i, OFS
for (j=1;j<=N;j++) {
printf "%s",(b[i,j]=="")?"NA":b[i,j]
printf "%s",(j==N)?ORS:OFS
}
}
}