結果ファイルがありますA.tsv
(区切り記号= \t
)。
BC01 2551 99
BC03 2547 95
BC04 2578 99
BC05 2547 97
そしてサンプル情報を含むファイルB.tsv
(区切り文字= \t
):
BC01
BC04
BC02
BC03
BC05
不足している例を追加したいA.tsv
(ただし、新しいファイルとして印刷)B.tsv
。
BC01 2551 99
BC02
BC03 2547 95
BC04 2578 99
BC05 2547 97
これまでにいくつかのawkコマンドを試しましたが、結果はありませんでした。
awk -v OFS="\t" 'NR==FNR{a[$1]=$1;next}{print $0};NR!=FNR{a[$1]=$1;next}{print $1}' B.tsv A.tsv > C.tsv
どうすればわかりますか?
答え1
これらのファイルを処理する正しい方法は、A.tsv
キーを使用して辞書にデコード$1
し、行全体の内容を保存し、それを使用してB.tsv
値を見つけることです。
awk -v FS="\t" ' FNR == NR { arr[$1] = $0; next }
( $1 in arr ){ print arr[$1]; next } { print $1 }' A.tsv B.tsv
最終結果を並べ替えるには、$1
両方のファイルの内容を索引付けし、END
値がない場合はキーを個別に印刷して処理する必要があります。
awk -v FS="\t" ' FNR == NR { arr[$1] = $0; next }
!( $1 in arr ) { arr[$1] } END { for (x in arr) print arr[x] ? arr[x] : x }' A.tsv B.tsv