Text-Processing

如何合併兩個文件

  • March 26, 2021

我想加入兩個文件,我必須使用命令 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命令

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

問題join在於連接欄位必須相同。所以你必須按摩 file2.txt 才能有一個可以與 file1.txt 完全匹配的欄位

此外,必須對數據進行排序。

Process Substitution在使用 時非常有用join

引用自:https://unix.stackexchange.com/questions/641254