2つのファイルを結合する方法

2つのファイルを結合する方法

両方のファイルを結合したいので、Joinコマンドを使用する必要があります。これは最初のファイルfile1.txtです。

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

2番目のファイルは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

ご覧のとおり、File 1は列1のFile 2と一致しています。また、ファイル 1 の列 2 と列 3 をフィルタリングするには、これら 2 つのフィールドをリンクする必要があります。 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は最初の2行が同じで、違いは-003-aなので、GTEX-1117F-003-aに関連していますが、カットしてみると互いに関連していることがわかります。試しましたが、join -1 1 -1 1 file1.txt file2.txt「接続:互換性のない接続フィールド1、2」というメッセージが表示されました。そしてこれを利用して2つの新しいファイルを生成して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結合フィールドが同じでなければならないことです。したがって、file1.txtと正確に一致するフィールドを取得するには、file2.txtを変更する必要があります。

また、データを並べ替える必要があります。

プロセスの交換sは使用時に非常に便利ですjoin

関連情報