我需要比较/排序两个文本文件

我需要比较/排序两个文本文件

这就是场景。我有 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.txtFile2.txt),并且您想要创建一个File3.txt包含两个输入文件的排序和组合内容的输出文件( )?

假设每个文件的第一列是唯一标识符(例如,RB0009RB0010等),并且您希望通过匹配这些标识符来组合两个文件,则可以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需要排序的输入文件才能正常工作。

  • >将命令的输出重定向joinFile3.txt.

结果File3.txt应包含两个输入文件的组合内容,按第一列(唯一标识符)排序。

相关内容