
我有一個結果文件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