我有两个文件:File1& File2 Where File有100个名字,而File2有1000个名字,现在我想让awk读取File1和File2,只打印File2中的名字而不是File1上的名字。
你的帮助&非常感谢。
Example: Below File1 & File2 names...
File1:
karn
steve
vaithee
File2:
vaithee
Karn
steve
niraj
mana
henry
So, Output should be:
niraj
mana
henry
答案 0 :(得分:2)
awk 'FNR==NR{a[tolower($1)];next}!(tolower($1) in a)' file1 file2
<强>输入强>
$ cat file1
karn
steve
vaithee
$ cat file2
vaithee
Karn
steve
niraj
mana
henry
<强>输出强>
$ awk 'FNR==NR{a[tolower($1)];next}!(tolower($1) in a)' file1 file2
niraj
mana
henry
<强>解释强>
FNR==NR
如果到目前为止在当前文件中读取的记录数
等于所有文件到目前为止读取的记录数,
条件,只有在第一个文件读取时才为真。
a[tolower($1)]
填充数组“a”,使得 由第一个索引 以小写字母表示的字段 file1的当前记录
next
转到下一条记录,这样我们就不会进行任何处理 用于第二个文件中的记录。
执行默认操作
!(tolower($1) in a)
如果数组a
索引是从...构造的 file2当前记录的小写字段1($ 1)不存在(!
) 在数组a
中,我们得到布尔值true (!
被调用的逻辑非运算符。它用于反转其操作数的逻辑状态。如果条件为真,则逻辑NOT运算符将使它是假的,反之亦然。)所以awk从file2print $0
file1 file2
读取file1然后读取file2