我有两个文件:
文件1
212 21 24.8 13.8354303 15.2841303
258 21 22.2 15.8507278 17.2994278
270 21 27.8 13.0482192 14.4969192
204 21 22.4 13.9465939 15.3952939
248 21 16.6 9.2714745 11.6494745
279 21 22.8 12.9151566 15.2931566
文件2
212 21 24.8 1.03 2.8954
258 21 22.2 1.03 2.8954
270 21 27.8 1.05 2.9154
204 21 22.4 1.21 3.0754
248 21 16.6 1.29 3.1554
279 21 22.8 1.47 3.3354
我必须以这种方式加入两者:
212 21 24.8 13.8354303 15.2841303 1.03 2.8954
258 21 22.2 15.8507278 17.2994278 1.03 2.8954
270 21 27.8 13.0482192 14.4969192 1.05 2.9154
204 21 22.4 13.9465939 15.3952939 1.21 3.0754
248 21 16.6 9.2714745 11.6494745 1.29 3.1554
279 21 22.8 12.9151566 15.2931566 1.47 3.3354
但是,我使用了这个awk
命令:
awk 'NR==FNR{a[$1]=$4 FS $5;next}$1 in a{print $1,$2,$3,$4,$5,a[$1]}' File2 File1 > output
我得到了这个文件:
输出
212 21 24.8 13.8354303 15.2841303
1.03 2.8954
258 21 22.2 15.8507278 17.2994278
1.03 2.8954
270 21 27.8 13.0482192 14.4969192
1.05 2.9154
204 21 22.4 13.9465939 15.3952939
1.21 3.0754
248 21 16.6 9.2714745 11.6494745
1.29 3.1554
279 21 22.8 12.9151566 15.2931566
1.47 3.3354
我不知道我做错了什么,我的文件有大约 400 行。
答案1
假设数据已排序,对于这种情况我将使用join
命令
join -o 1.1 1.2 1.3 1.4 1.5 2.4 2.5 file1.txt file2.txt
212 21 24.8 13.8354303 15.2841303 1.03 2.8954
258 21 22.2 15.8507278 17.2994278 1.03 2.8954
270 21 27.8 13.0482192 14.4969192 1.05 2.9154
204 21 22.4 13.9465939 15.3952939 1.21 3.0754
248 21 16.6 9.2714745 11.6494745 1.29 3.1554
279 21 22.8 12.9151566 15.2931566 1.47 3.3354
您可以使用-o
样式设置格式,x.y
其中x
是文件,y
是字段。
答案2
请注意,对于加入正确的结果 file1 和 file2 应该事先按第一个字段排序。
如果没有案例并且您想维持秩序
awk '
FNR==NR{a[$1]=$4 OFS $5; next}
$1 in a{print $0, a[$1]}
' OFS='\t' file2 file1