![我需要比较/排序两个文本文件](https://linux22.com/image/216987/%E6%88%91%E9%9C%80%E8%A6%81%E6%AF%94%E8%BE%83%2F%E6%8E%92%E5%BA%8F%E4%B8%A4%E4%B8%AA%E6%96%87%E6%9C%AC%E6%96%87%E4%BB%B6.png)
这就是场景。我有 File1 和 File2,我喜欢在 File3 中得到结果。我对 Linux 有点陌生,但到目前为止我尝试过使用 sort、diff 和 comm。但到目前为止还没有运气。
File1.txt File2.txt > File3.txt
文件1.txt
RB0009 8,89
RB0010 5,67
RB0015 4,32
RB0027 6,56
文件2.txt
RB0009 8,89
RB0010 5,67
RB0015 4,32
RB0027 6,56
RB0033 9,78
文件3.txt
RB0009 700111i 8,89
RB0010 700092i 5,67
RB0015 700148i 4,32
RB0027 700123i 6,56
非常感谢您的帮助。
答案1
根据我下面的评论,我似乎误解了这个问题。这应该给你预期的输出:
paste File1.txt File2.txt | awk '{print $1"\t" "700" NR "i" "\t" $2}' > File3.txt
误解如下:
如果我理解正确的话,您有两个输入文件(File1.txt
和File2.txt
),并且您想要创建一个File3.txt
包含两个输入文件的排序和组合内容的输出文件( )?
假设每个文件的第一列是唯一标识符(例如,RB0009
、RB0010
等),并且您希望通过匹配这些标识符来组合两个文件,则可以join
在 Linux 中使用该命令。
这是一个示例命令,应该可以完成您正在寻找的内容:
join -t $'\t' -a 1 -a 2 -o auto <(sort File1.txt) <(sort File2.txt) > File3.txt
命令分解:
join
是我们用来连接两个文件的命令。-t $'\t'
指示join
使用制表符 (\t
) 作为字段分隔符。-a 1 -a 2
指示join
包含两个文件中的所有行,即使没有匹配项。-o auto
告诉join
输出两个文件中的字段,并用制表符分隔。<(sort File1.txt)
和<(sort File2.txt)
是进程替换,在将每个文件的内容传递到join
.这很重要,因为join
需要排序的输入文件才能正常工作。>
将命令的输出重定向join
到File3.txt
.
结果File3.txt
应包含两个输入文件的组合内容,按第一列(唯一标识符)排序。