我有两个文件,都采用相同的格式——两列都包含一个数字,例如:
文件 1
1.00 99
2.00 343
3.00 34
...
10.00 343
文件2
1.00 0.4
2.00 0.5
3.00 0.34
...
10.00 0.9
我想生成以下文件(使用 awk、bash perl):
1.00 99 0.4
2.00 343 0.5
3.00 34 0.34
...
10.00 343 0.9
谢谢
最佳答案
join file1 file2
假设文件在连接字段上排序。如果不是,您可以这样做:
join <(sort -V file1) <(sort -V file2)
这是一个 AWK 版本(sort
补偿了 AWK 的非确定性数组排序):
awk '{a[$1]=a[$1] FS $2} END {for (i in a) print i a[i]}' file1 file2 | sort -V
它似乎比 Perl 答案更短且更易读。
在gawk
4中,可以设置数组遍历顺序:
awk 'BEGIN {PROCINFO["sorted_in"] = "@ind_num_asc"} {a[$1]=a[$1] FS $2} END {for (i in a) print i a[i]}' file1 file2
而且您不必使用排序
实用程序。 @ind_num_asc
是索引数字升序。参见 Controlling Array Traversal and Array Sorting和 Using Predefined Array Scanning Orders with gawk .
请注意,上面的sort
命令中的-V
(--version-sort
) 需要GNU sort
来自 coreutils 7.0 或更高版本。感谢 @simlev 指出它应该在可用时使用。
关于perl - 根据第一列将两个文件合并为一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4072180/