awk读取文件1和文件2并打印两者之间的差异

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

我有两个文件名为: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:

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[tolower($1)]
    填充数组“a”,使 由第一个索引 以小写字母表示的字段 文件1的当前记录

  • next
    转到下一条记录,这样我们就不会进行任何处理 用于第二个文件中的记录

  • !(a中的更低($1)
    如果数组
    a
    索引是由 文件2当前记录的小写字段1($1)不存在(
    ) 在数组
    a
    中,我们得到布尔值true
    称为逻辑NOT运算符。它用于反转其操作数的逻辑状态。如果条件为true,则逻辑NOT运算符将使其为false,反之亦然。)
    因此awk从文件2中执行默认操作
    打印$0

  • file1 file2
    先读取file1,然后读取file2


我通过
awk'NR==FNR{a[$1]++;next}得到结果!(a中的$1){print$1}'File2.txt File1.txt
@Karn:我使用
tolower
是因为
Karn!=卡恩
@karn:请参见上文,我添加了解释