使用 awk 从另一个文件中删除基于列的行

Use awk to remove lines based on a column from another file

我有以下代码可以从多列 file_1 中提取行,这些行在出现在单列 file_2 中的第一列中具有值:

awk 'NR==FNR{a[][[=10=]];next} [=10=] in a {for (i in a[[=10=]]) print i}' file_1 file_2

我从这个问题的答案中得到了这段代码:

我想更改代码以执行相反的操作,即删除 file_1 中第一列与出现在单列 file_2 中的任何值相匹配的每一行。我该怎么做?

awk 'NR==FNR { arr[[=10=]]="1";next  } arr[]!="1" { print [=10=] }' file2 file1

首先处理第二个文件(NR==FNR)并创建一个名为arr 的数组,其中行($0) 为键,1 为值。然后在处理下一个文件 (file1) 时,检查第一个 space 分隔字段 ($1) 是否作为键存在于数组 arr 中,如果不存在,则打印该行。

如果要存储结果,请将输出定向到文件:

awk 'NR==FNR { arr[[=11=]]="1";next  } arr[]!="1" { print [=11=] }' file2 file1 > file3