awk脚本中, “if” 语句
问题描述:
我想求人关于下列问题不正确的响应:awk脚本中, “if” 语句
我有两个文件,文件1:
1 apples
2 bananas
3 orange
4 prunes
和文件2:
1 oranges
2 apples
3 nuts
我需要从file2中提取所有与file1不匹配的行(即“3个坚果”)。我写了一个脚本awk
:
#!/bin/awk -f
BEGIN {
while (getline <hdr>0) {
a[i++]=$2;
}
close (hdr);
}
{ for (i in a) {
if (a[i]!=$2) {
print a[i];
}
}
}
我的命令行:
awk -v hdr=file2 -f script_name file1
但是,我得到的结果是文件2个几倍的只是内容。 问题可能是什么?
答
你的代码有很多错误(即使是输入文件)。假设行号是你输入的一部分,你可以试试这个
$ join -v2 -12 -22 -o2.1,2.2 <(sort -k2 file1) <(sort -k2 file2)
将返回
3 nuts
1 oranges
,如果你在你的第一个文件变“橙”到“橘子”你只会得到坚果。
类似的功能awk
脚本将
$ awk 'NR==FNR{a[$2]=$0; next}
$2 in a{delete a[$2]}
END{for(k in a) print a[k]}' file2 file1
3 nuts
1 oranges
笔记文件2首先提供。
这将是简单不过,文件1,首先提供的其他方式
$ awk 'NR==FNR{a[$2]; next} !($2 in a)' file1 file2
1 oranges
3 nuts
音符。
对于文件中的每一行,你都打印出与它不一样的所有'a [i]'。 – Barmar
您需要浏览所有* a中的条目。如果它们中没有一个匹配,则打印'a [i]'。一个简单的方法是将'a'设为一个关联数组,其中'$ 2'是索引。然后你可以写'if(!($ a in a))' – Barmar
在第二个文件中,'1 oranges'与第一个文件中的'3 orange'不匹配,除非你做了一些花哨的语言分析,显示。 (另外,复数和单数都回到前面:'1橙色','3橙子':) :) _) –