我正在寻找类似于 bash 命令 comm 的东西,我可以用它来选择我的 2 个文件所特有的条目和它们所共有的条目。 当我每个文件只有一列时,Comm 工作得很好,例如。
comm -13 FILE1.txt FILE2.txt > Entries_only_in_file1.txt
但现在我希望保留多列信息。我想选择第 2 列作为筛选行以查找两个文件之间唯一和常见条目的行。如果第二列中的条目出现在两个文件中,我还想在第 3、4 和 5 列中记录信息(如果可能,这并不那么重要)。 这是输入和输出的示例。
FILE1.txt
NM_023928 AACS 2 2 1
NM_182662 AADAT 2 2 1
NM_153698 AAED1 1 5 3
NM_001271 AAGAB 2 2 1
FILE2.txt
NM_153698 AAED1 2 5 3
NM_001271 AAGAB 2 2 1
NM_001605 AARS 3 40 37
NM_212533 ABCA2 3 4 2
想要的输出:
COMMON.txt
NM_153698 AAED1 1 5 3 2 5 3
NM_001271 AAGAB 2 2 1 2 2 1
UNIQUE_TO_1.txt
NM_023928 AACS 2 2 1
NM_182662 AADAT 2 2 1
UNIQUE_TO_2.txt
NM_001605 AARS 3 40 37
NM_212533 ABCA2 3 4 2
我知道以前也有过类似的问题,但我找不到我要找的东西。任何想法都非常感谢,谢谢。
最佳答案
join
具有以下对您的任务有用的选项:
-j FIELD
:加入字段FIELD
-o FORMAT
:指定输出格式,作为逗号分隔的 FILENUM.FIELD 列表。-v FILENUM
:仅在FILENUM
上输出行。
两个文件共有的:
$ join -j2 -o 1.1,1.2,1.3,1.4,1.5,2.3,2.4,2.5 FILE1.txt FILE2.txt
NM_153698 AAED1 1 5 3 2 5 3
NM_001271 AAGAB 2 2 1 2 2 1
FILE1 独有的:
$ join -j2 -v1 FILE1.txt FILE2.txt
AACS NM_023928 2 2 1
AADAT NM_182662 2 2 1
FILE2 独有的:
$ join -j2 -v2 FILE1.txt FILE2.txt
AARS NM_001605 3 40 37
ABCA2 NM_212533 3 4 2
关于BASH comm 命令,但适用于多列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37170326/