我有一个结果文件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