使用awk或python合并两个已排序的文件

时间:2014-08-28 15:03:18

标签: python sorting awk merge

我有两个文件,仅取决于第一列值。

文件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

2 个答案:

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