我有两个文件,
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
但是这段代码不起作用:程序根本不产生任何输出。为什么?如何修复代码以获得预期的输出?
我看到的问题是您在
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