【问题标题】:awk to read the file1 and file2 and print difference between twoawk 读取 file1 和 file2 并打印两者之间的差异
【发布时间】:2017-07-10 00:52:29
【问题描述】:

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

【问题讨论】:

    标签: awk


    【解决方案1】:
    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) IF 数组 a 索引从 file2 的当前记录的小写字段 1 ($1) 不存在 (!) 在数组a中,我们得到 boolean true (! 称为逻辑非运算符。它用于反转其操作数的逻辑状态。如果条件为真,则逻辑非运算符将使其为假,反之亦然反之亦然。) 所以 awk 从 file2 执行默认操作 print $0

    • file1 file2读取file1再读取file2

    【讨论】:

    • 我得到了awk 'NR==FNR{a[$1]++;next} !($1 in a){print $1}' File2.txt File1.txt的结果
    • @Karn:我使用了tolower,因为Karn != karn
    • @Karn:按要求见上文我添加了解释
    猜你喜欢
    • 2013-03-04
    • 2019-01-31
    • 1970-01-01
    • 2020-10-29
    • 2014-05-26
    • 1970-01-01
    • 2013-12-08
    • 2016-01-02
    • 1970-01-01
    相关资源
    最近更新 更多