如何打印其他文件中没有出现的行?

问题描述 投票:0回答:1

我有两个文件,

input1
input2
。我想要执行以下操作:对于
L
中的任何行
input1
,检查
input2
是否包含至少一行其文本等于
L
;如果
input2
不包含这样的行,则将
L
打印到输出文件。

例如,

input1

aaa
bbb
ccc

input2

aaa
ccc

预期输出是

bbb

我的代码是

gawk -F ';' 'BEGIN {IGNORECASE = 1;}; 
    {if ( FILENAME == "input2" ) 
    {a[$0] = 1};
    if ( (FILENAME == "input1" ) && !( $0 in a))  
    {print($0) > "path/to/output"}}' 
    path/to/input2 path/to/input1 

但是这段代码不起作用:程序根本不产生任何输出。为什么?如何修复代码以获得预期的输出?

awk
1个回答
0
投票

我看到的问题是您在

IGNORECASE
块中设置
BEGIN
变量,标准
awk
不支持该变量。您可以使用
tolower()
函数使比较不区分大小写。

gawk -F ';' '{
    if (FILENAME == "input2") {
        a[tolower($0)] = 1
    };
    if (FILENAME == "input1" && !(tolower($0) in a)) {
        print($0) > "path/to/output"
    }
}' path/to/input2 path/to/input1
© www.soinside.com 2019 - 2024. All rights reserved.