複数のファイルの特定の列を結合する方法

複数のファイルの特定の列を結合する方法

データファイルがありますA.tsv(フィールド区切り記号= \t)。

id  clade   mutation
243 40A SDF
254 20B
261 40A
267 20B

B.tsv(フィールド区切り記号 = \t):

id  clade   mutation
243 40A
254 20B
261 40A
267 20B SLT

C.tsv(フィールド区切り記号 = \t):

id  clade   mutation
243 40A
254 20B
261 40A MGG
267 20B

すべてのファイル間で他の唯一の列は列であることを知り、すべてのファイルを1つにリンクしたいと思いますmutation。予想される結果は次のとおりです。

id  clade   mutation
243 40A SDF
254 20B
261 40A MGG
267 20B SLT

これまで私は次のことを試しました。

awk 'BEGIN{FS=OFS="\t"} NR==FNR{klos[NR]=$3; next} $3==""{$3=klos[FNR]} 1' *.tsv > output.tsv

しかし、うまくいきません。する方法はありますか?ありがとう

PS:これはサンプルテストです。実際には3つ以上のファイルがあります。ただし、例と同様に、mutationその列に同じ内容を持つ2つのファイルはありません。

ベストアンサー1

すべてのUnixシステムのすべてのシェルでawkを使用してください。

$ cat tst.awk
BEGIN { FS=OFS="\t" }
(NR == FNR) || ($3 != "") {
    fnr2rec[FNR] = $0
}
FILENAME == ARGV[ARGC-1] {
    print fnr2rec[FNR]
}

$ awk -f tst.awk A.tsv B.tsv C.tsv
id      clade   mutation
243     40A     SDF
254     20B
261     40A     MGG
267     20B     SLT

おすすめ記事