awk读取文件1和文件2并打印两者之间的差异
我有两个文件名为:File1和File2,其中File有100个名称,File2有1000个名称,现在我希望awk读取File1和File2,只打印File2中的名称,而不打印File1中的名称 非常感谢您的帮助和时间awk读取文件1和文件2并打印两者之间的差异,awk,Awk,我有两个文件名为:File1和File2,其中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: nir
Example: Below File1 & File2 names...
File1:
karn
steve
vaithee
File2:
vaithee
Karn
steve
niraj
mana
henry
So, Output should be:
niraj
mana
henry
输入
$ 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
输出
$ 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”,使 由第一个索引 以小写字母表示的字段 文件1的当前记录a[tolower($1)]
-
转到下一条记录,这样我们就不会进行任何处理 用于第二个文件中的记录next
-
如果数组!(a中的更低($1)
索引是由 文件2当前记录的小写字段1($1)不存在(a
) 在数组!
中,我们得到布尔值true(a
称为逻辑NOT运算符。它用于反转其操作数的逻辑状态。如果条件为true,则逻辑NOT运算符将使其为false,反之亦然。)因此awk从文件2中执行默认操作!
打印$0
-
先读取file1,然后读取file2file1 file2
awk'NR==FNR{a[$1]++;next}得到结果!(a中的$1){print$1}'File2.txt File1.txt
@Karn:我使用tolower
是因为Karn!=卡恩
@karn:请参见上文,我添加了解释