我有两个文件,仅取决于第一列值。
文件1:
2.3 5 3 66
5.5 2 3 54
6.2 4 1 33
文件2:
1.2 3 7 22
4.5 2 6 77
8.9 4 2 54
我想将这两个文件与最终排序的文件合并为
1.2 3 7 22
2.3 5 3 66
4.5 2 6 77
5.5 2 3 54
6.2 4 1 33
8.9 4 2 54
答案 0 :(得分:4)
如何使用sort -m
(合并排序文件):
sort -m -n file1 file2 > file3
答案 1 :(得分:0)
你的问题很好,但我认为它被投了票,因为你没有提供足够的细节。如果我可以假设文件已经按列1排序,那么您希望最终输出按列1排序,并且第1列中没有重复值,则此解决方案有效:
cat file1 \
| awk 'BEGIN{
cmd="cat file2"; cmd | getline line2; split(line2,a," "); key2=a[1]} {
key1=$1; while(key2<key1) {
print line2; cmd | getline line2; split(line2,a," "); key2=a[1]};
print $0} END{
if(key2>key1) print line2}'
您不需要将cat file1传递给awk,但我更喜欢将输入文件放在命令的开头而不是结尾。我经常因为多余使用猫而受到批评。
你的问题用Python标记,所以这里也是一个Python3解决方案,利用heapq.merge():
import heapq
with open('file1') as fd1, open('file2') as fd2:
for line in heapq.merge(fd1, fd2):
print(line, end='')
我在搜索“在python中合并已排序的文件”时找到了答案。在其他页面中,这一页出现了:heapq.merge() function to list of sorted files