偶然间,看到了这么一段代码
awk 'BEGIN{OFS=FS="\t"}ARGIND==1{x[$1]=$2}ARGIND==2{print x[$1],$2}' filea fileb > filec
作为一个刚接触linux的小白,我肯定是看不懂这一串代码的。在求助于互联网,并做了一些尝试后,我对这一串代码有了一些自己的理解(希望不会误人子弟😂😂)。
ARGIND,我们在man awk中可以看到,他的含义是The index in ARGV of the current file being processed. 中文含义是命令行中的文件序号。
在上例中,即filea,fileb的序号。ARGIND==1的含义为判断是否正在处理第一个文件(即filea)。
文件得一个一个处理嘛,在处理第一个文件的时候,ARGIND==1满足,执行x[$1]=$2。
x[$1]=$2我把他想象成python的字典。$1(每行的第一个字符段)是字典的键,$2(每行的第二个字符段)是字典的值。在处理第一个文件的时候,文件里的内容被临时存储在一个类似python字典的东西里(如果键有重复,后进的会把先进的覆盖掉)。然后在处理第二个文件的时候,字典中的键开始在第二个文件的对应字符段搜索,x[$1]表示他将在每行第一个字符段搜索,并输出对应的存储在字典中的值。