如何加入两个文件

如何加入两个文件

我想连接两个文件,并且必须使用命令 join。这是第一个文件 file1.txt

SUBJID  SEX DTHHRDY
GTEX-1117F  2   4
GTEX-111CU  1   0
GTEX-111FC  1   1
GTEX-1122O  2   4

这是第二个文件file2.txt

GTEX-1117F-003-a
GTEX-1117F-003-b
GTEX-111CU-0011-a
GTEX-111FC-0011
GTEX-1122O-0045-a
GTEX-1122O-0045-b

正如您所看到的,文件 1 与第 1 列中的文件 2 匹配。此外,我必须连接这两个字段来过滤文件 1 中的第 2 列和第 3 列。对于第 2 列,我必须采用所有值 2,对于第 3 列,我必须采用所有值4.

需要输出

Sample  SEX DTHHRDY
GTEX-1117F-003-a    2   4
GTEX-1117F-003-b    2   4
GTEX-1122O-0045-a   2   4
GTEX-1122O-0045-b   2   4

GTEX-1117F 与 GTEX-1117F-003-a 相关,因为前两行是相同的,区别是 -003-a,但你可以剪切它,你会看到它们是相关的。我尝试过join -1 1 -1 1 file1.txt file2.txt,但收到此消息“连接:不兼容的连接字段 1、2”。此外,我用 this 创建了两个新文件awk '{if ($2 == "2") print $1,2,3}',所以我有 12 个数据,但现在我不知道如何与 file2.txt 联接。另外,我必须使用join命令

答案1

head -n 1 file1.txt
join <(paste -d" " <(cut -d- -f1-2 file2.txt) file2.txt | sort) \
     <(tail -n +2 file1.txt | sort) \
| cut -d" " -f2- \
| awk '$2 == 2 && $3 == 4' \
| column -t
SUBJID  SEX DTHHRDY
GTEX-1117F-003-a   2  4
GTEX-1117F-003-b   2  4
GTEX-1122O-0045-a  2  4
GTEX-1122O-0045-b  2  4

答案2

问题join是连接字段必须相同。所以你必须修改 file2.txt 以获得一个可以与 file1.txt 完全匹配的字段

此外,数据必须排序。

流程替代s 在使用 时非常有用join

相关内容