我在脚本中有一个awk命令我正在努力工作,我不明白'a'的含义:
awk'FNR == NR {a [$ 1] = $ 0; next}($ 2 in a)'FILELIST.TXT FILEIN。*> FILEOUT。*
我很擅长使用命令行,所以我只是想弄清楚,谢谢。
答案 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立即停止处理当前记录并继续下一条记录。