表1(タブ区切り):
NC_000001.11 1243 A T 0.14
NC_000005.11 1432 G C 0.0006
NC_000012.12 1284 A T 0.93428
NC_000021.9 9824 T C 0.9
ルックアップテーブル(タブで区切られています) - 実際にはgzipから約6Gまでかなり大きいです。
NC_000001.11 1243 rs73647921 A T
NC_000005.11 1432 rs75444 G C
NC_000012.12 1284 rs754723 A T
NC_000021.9 9824 rs865545 T C
照会テーブルの列1/2/4/5に対応する表1の最初の4列に一致する出力が必要です。
MarkerName P-Value
rs73647921 0.14
rs75444 0.0006
rs754723 0.93428
rs865545 0.9
次のようにJoinを使用する必要があると思います。
join -t, -a 1 -a 2 -o0,1.5,2.3 -e ' -' file1 file2
しかし、これはうまくいかないようです。 gzipを使用してファイルをどのように圧縮できますか?
ベストアンサー1
awk(とbash)を使って書くことができます
awk '
BEGIN {FS = OFS = "\t"}
NR == FNR {pvalue[$1,$2,$3,$4] = $5; next}
FNR == 1 {print "MarkerName", "P-Value"}
{ key = $1 SUBSEP $2 SUBSEP $4 SUBSEP $5
sub(/\r$/, "", key)
}
key in pvalue {print $3, pvalue[key]}
' table1.tsv <(zcat lookup.tsv.gz)
awkはSUBSEP変数を使用して、コンマで区切られた配列インデックスを連結します。
zcatの最後の構文はbashです。プロセスの交換
マルチフィールド結合条件の場合、join
処理が難しい場合があります。ファイルがソートされていない場合でも文句を表示します。