awk命令中“a”的含义是什么?

时间:2013-09-27 14:38:16

标签: awk

我在脚本中有一个awk命令我正在努力工作,我不明白'a'的含义:

  

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

我很擅长使用命令行,所以我只是想弄清楚,谢谢。

3 个答案:

答案 0 :(得分:5)

a是一个关联数组。

a[$1] = $0;

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

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

($2 in a)

并在找到$2中的单词时打印该行。这使得在$0中存储a相对昂贵,因为它存储了整个文件的副本(如果文件的每一行只有一个单词,则可能两次)。执行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

答案 1 :(得分:3)

此处a不是一个命令,而是一个awk array,它也很可能是arr

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

答案 2 :(得分:2)

a只是一个数组,在你的代码中

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

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

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