好吧,我有几个文件,我很难用awk加入它们。 以下是三个示例文件:
FILEA
2 2 31771 15 5327353 4.73E-04 1 1
2 2 40642 23 27428869 -8.29E-04 1 1
2 2 21517 7 89002990 -2.41E-04 1 1
2 2 33787 16 44955568 2.86E-05 1 1
FileB
2 2 31771 15 5327353 5.07E-04 1 1
2 2 40642 23 27428869 5.45E-04 1 1
2 2 21517 7 89002990 1.85E-04 1 1
2 2 33787 16 44955568 3.73E-04 1 1
FileC
2 2 31771 15 5327353 4.28E-04 1 1
2 2 40642 23 27428869 -7.55E-04 1 1
2 2 21517 7 89002990 -2.01E-04 1 1
2 2 33787 16 44955568 3.09E-05 1 1
每个文件有8列,但我不需要第1,2,7和8列。第3列,第4列和第5列对所有文件都是通用的,这些文件可能是用于连接文件的参考列,第6列将是每个文件的不同信息。一般来说,我的最终文件看起来像这样:
Finalfile
31771 15 5327353 4.73E-04 5.07E-04 4.28E-04
40642 23 27428869 -8.29E-04 5.45E-04 -7.55E-04
21517 7 89002990 -2.41E-04 1.85E-04 -2.01E-04
33787 16 44955568 2.86E-05 3.73E-04 3.09E-05
我尝试了以下命令:
awk 'NR==FNR{a[$3]=$6;next}{print $3"\t"$4"\t"$5"\t"$6"\t"a[$3]}' FileA FileB FileC > Finalfile
但不幸的是它只适用于两个文件,我得到这样的东西:
2 2 31771 15 5327353 4.73E-04 5.07E-04
2 2 40642 23 27428869 -8.29E-04 5.45E-04
2 2 21517 7 89002990 -2.41E-04 1.85E-04
2 2 33787 16 44955568 2.86E-05 3.73E-04
有人可以帮忙吗?请记住,有多个文件(10),而不仅仅是三个。非常感谢你!
答案 0 :(得分:3)
尝试一下:
awk '{a[$3FS$4FS$5]=a[$3FS$4FS$5]""$6FS}END{for (i in a){print i, a[i]}}' file*
clean 版本(感谢@ james-brown):
awk '{ a[$3 OFS $4 OFS $5 FS] = a[$3 OFS $4 OFS $5 FS] ( a[$3 OFS $4 OFS $5 FS] == "" ? "" : OFS) $6 }
END{ for (i in a){print i,a[i]} }' OFS="\t" file*
<强>输出强>
33787 16 44955568 2.86E-05 3.73E-04 3.09E-05
21517 7 89002990 -2.41E-04 1.85E-04 -2.01E-04
40642 23 27428869 -8.29E-04 5.45E-04 -7.55E-04
31771 15 5327353 4.73E-04 5.07E-04 4.28E-04
答案 1 :(得分:2)
粘贴 + awk 方法(&#34;漂亮&#34;输出):
paste fileA fileB fileC | awk '{print $3,$4,$5,$6,$14,$22}' | column -tx
输出:
31771 15 5327353 4.73E-04 5.07E-04 4.28E-04
40642 23 27428869 -8.29E-04 5.45E-04 -7.55E-04
21517 7 89002990 -2.41E-04 1.85E-04 -2.01E-04
33787 16 44955568 2.86E-05 3.73E-04 3.09E-05