1

I have an awk command in a script I am trying to make work, and I don't understand the meaning of 'a':

awk 'FNR==NR{ a[$1]=$0;next } ($2 in a)' FILELIST.TXT FILEIN.* > FILEOUT.*

I'm quite new to using command line, so I'm just trying to figure things out, thanks.

4

3 回答 3

6

a是一个关联数组。

a[$1] = $0;

将行中的第一个单词$1作为数组中的索引,并将整行存储$0为值。它对第一个文件执行此操作(而文件记录号等于总记录号)。该next命令意味着它在处理第一个文件时不处理脚本的其余部分。

对于其余的数据文件,它评估:

($2 in a)

如果找到单词 in$2则打印该行。这使得存储相对昂贵$0a因为它存储了整个文件的副本(如果文件的每一行只有一个单词,可能会存储两次)。这样做a[$1]++甚至更常规,也足够了a[$1] = 1

给定 FILELIST.TXT

ABC The rest
DEF And more

鉴于 FILEIN.1 包含:

Word ABC and so on
Grow FED won't be shown
This DEF will be shown
The XYZ will be missing

输出将是:

Word ABC and so on
This DEF will be shown
于 2013-09-27T14:45:05.740 回答
3

a不是命令,但awk array也可以是arr

awk 'FNR==NR {arr[$1]=$0;next} ($2 in arr)' FILELIST.TXT FILEIN.* > FILEOUT.*
于 2013-09-27T14:41:23.130 回答
2

在您的代码中,a 只不过是一个数组

FNR==NR{ a[$1]=$0;next } 

创建一个名为“a”的数组,其索引取自第一个输入文件的第一列。所有元素值都设置为当前记录。

下一条语句强制 awk 立即停止处理当前记录并继续处理下一条记录。

于 2013-09-27T14:43:07.980 回答