awk读取file1和file2并打印两个

时间:2017-02-20 16:32:26

标签: awk

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

1 个答案:

答案 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从file2

    执行默认操作print $0
  •   

    file1 file2读取file1然后读取file2