根据只有第一列值,我有两个文件。使用awk或python合并两个排序文件
文件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
根据只有第一列值,我有两个文件。使用awk或python合并两个排序文件
文件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
如何使用sort -m
(归并排序文件):
sort -m -n file1 file2 > file3
我不知道这是可能的排序!甜!谢谢!下面看看我的笨笨awk解决方案:)我应该清楚地阅读所有常见的UNIX工具的手册! – 2014-11-10 16:54:23
你的问题是一个很好的问题,但我认为它被投票了,因为你没有提供足够的细节。如果我可以假设文件已经由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文件1 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
为什么不简单'cat file1 file2 |排序' – goncalopp 2014-08-28 15:05:29
@goncalopp我认为我们打算假设文件已排序,提交人希望避免排序合并后的输出。 – 2014-11-10 17:15:26