使用awk附加一个包含多个文件数据的文件

时间:2013-12-30 14:03:14

标签: awk

我有一个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...

1 个答案:

答案 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
        }
    }
}