【发布时间】:2021-06-15 02:16:00
【问题描述】:
我想比较两个文件 File1.txt 和 File2.txt 的内容。当 File2.txt 的第 1 列中的一行与 File1.txt 的第 1 列中的行匹配时,我想从 File2.txt 输出整行。如果 File1.txt 的第 1 列中的行在 File2.txt 中不匹配,那么我想打印 File1.txt 的第 1 列中的行的内容,然后是制表符,然后是 0。我还想尝试在输出中保留第 1 列中的行顺序。
文件1.txt
abc
def
ghi
jkl
文件2.txt
abc 2
ghi 1
这是我一直在使用的命令,但它只输出匹配的实例。它不会打印没有匹配项后跟以制表符分隔的 0 的实例。
awk 'NR==FNR{a[$1];next} $1 in a{if ($1 in a) print $0;else print a[$1],"\t","0"}' File1.txt File2.txt
我认为下面的代码在做什么:
awk 'NR==FNR{a[$1];next}:为第一个文件的第 1 列创建一个数组。
$1 in a : 遍历数组。
{if ($1 in a) print $0; 如果 File2.txt 中的行与数组中的行匹配,则打印 File2.txt 中的所有行
;else print a[$1],"\t","0"}' : 如果 File2.txt 中的行与数组中的行不匹配,则打印 File1.txt 中的行,制表符,然后是“0”。
但显然不是这样。我不明白我做错了什么。
当前输出:
abc 2
ghi 1
期望的输出:
abc 2
def 0
ghi 1
jkl 0
谁能解释为什么在没有匹配的情况下不打印contents of line in File1.txt,\t,0。
【问题讨论】:
标签: awk