文件1:
G A 4
H B 3
I C 2
J D 1
文件2:
M H 6
N H 5
O K 4
P J 3
Q I 2
R I 1
S G 0
T L 1
期望:
M H 6
N H 5
P J 3
Q I 2
R I 1
S G 0
仅打印 file2 中的 $2 与 file1 中的 $1 匹配的行
我正在尝试构造 if 语句,但它给了我下面的语法错误
awk 'NR==FNR{a[NR]=$1; b[NR]=$2; next} ; {if{a[FNR]==b[FNR]}; {next}; { print }' file1 file2
syntax error at source line 1
context is
NR==FNR{a[NR]=$1; b[NR]=$2; next} ; >>> if <<< {a[FNR]==b[FNR]; next}; { print }
或者如果不使用 if 动词则没有输出
awk 'NR==FNR{a[NR]=$1; b[NR]=$2; next} ; {a[FNR]==b[FNR]; next}; { print }' file1 file2
你的代码过于复杂了。试试这样:
解释:
过滤
NR==FNR
器仅过滤来自 file1 的行,因为对于该文件,总记录数将与文件记录数相同对于第一个文件的行,我们将第一个字段 (
$1
) 添加为数组的键a
,其中a[$1]
. 然后我们跳过其余的命令next
由于我们调用
next
了适用于第一个文件的所有行的第一个块,因此第二个过滤器$2 in a
仅适用于第二个文件的行。过滤器
$2 in a
检查第二个单词$2
是否是 array 中的键a
。如果键存在,则执行默认操作,即打印当前行。输出
首先,它将打开 file1 并逐行读取,然后打开 file2 并检查每一行 file1 第一行 column 1 是否与 file2 的任何行 column2 匹配。如果匹配,则打印 file2 匹配的行,并继续为 file1 和 file2 的另一行