如果我有两个文件。文件A看起来像:
a 1
a 2
a 3
b 4
c 5
我的文件B有内容:
a
b
对于文件B中出现的所有内容以及文件A中第1列中的内容,我想删除这些行。因此文件A的预期输出应为:
c 5
非常感谢任何帮助!
答案 0 :(得分:1)
GNU Awk:
awk 'ARGIND == 1 { del[$0]++ } ARGIND == 2 && !del[$1]' B A
处理第一个文件(ARGIND
为1)时,通过递增其条目,将$0
(每一行)输入关联数组del
。
处理第二个文件时,如果第一个字段$1
与del
中的非零计数无关,请打印。
当然,我们将B
作为第一个文件,A
秒。
(当ARGIND == 2 && !del[$1]
模式表达式产生布尔值true时,打印操作是隐式的。没有操作的模式具有等同于{ print }
的隐含操作。
ARGIND
不在POSIX中。在便携式Awk代码中,可以使用丑陋的黑客来区分第一个文件和第二个文件:
awk 'FNR == NR { del[$0]++ } FNR < NR && !del[$1]' B A
处理完第一个文件时,&#34;文件记录号&#34; (当前文件中的记录号)等于&#34;总记录号&#34; (在所有文件中处理的绝对记录号)。当然,如果第一个文件根本不包含任何记录,则会中断。见What is "NR==FNR" in awk?
答案 1 :(得分:0)
以下将完成工作,
awk 'FNR==NR{map[$1]=1;next;}map[$1]==""{print;}' <fileB> <fileA>