求详解此命令 awk 'BEGIN{OFS=FS=":"} NR==FNR{a[$1]=$2}NR>FNR{$2=a[$1];print}' 1.txt 2.txt
各个部分求解释BEGIN{OFS=FS=":"}为执行前将输出和输入字段分隔符设置为“:”但是后两个部分我就太理解了?求高人指点...
各个部分求解释
BEGIN{OFS=FS=":"} 为执行前将输出和输入字段分隔符设置为 “:”
但是后两个部分我就太理解了? 求高人指点 展开
BEGIN{OFS=FS=":"} 为执行前将输出和输入字段分隔符设置为 “:”
但是后两个部分我就太理解了? 求高人指点 展开
1个回答
展开全部
BEGIN{OFS=FS=":"}
==>如你所说,将输出和输入分隔符设置为冒号,看来你知道这个,就不说了;
NR==FNR{a[$1]=$2}
==>NR为当前所有已读入的行数,FNR为当前文件已读入的行数,那么意思很明显,"NR=FNR"就表示读取第一个文件(1.txt)的每行时,"a[$1]=$2"表示设置一个数组元素,该元素下标为第一列,该元素值为第二列。
NR>FNR{$2=a[$1];print}
==>根据前面的讲解,这里"NR>FNR"当然就表示读取第二个文件(2.txt)每行时,"$2=a[$1];print"表示将该行的第二列替换为之前建立的那个数组中对应的元素,该元素的下标为第一列的值,然后打印替换后的该行。
如1.txt中有如下内容:
a:1
b:2
c:3
2.txt中有以下内容:
b:xiaobi:hehe
c:cat:jie
a:dog:dudu
那么打印内容为:
b:2:hehe
c:3:jie
a:1:dudu
==>如你所说,将输出和输入分隔符设置为冒号,看来你知道这个,就不说了;
NR==FNR{a[$1]=$2}
==>NR为当前所有已读入的行数,FNR为当前文件已读入的行数,那么意思很明显,"NR=FNR"就表示读取第一个文件(1.txt)的每行时,"a[$1]=$2"表示设置一个数组元素,该元素下标为第一列,该元素值为第二列。
NR>FNR{$2=a[$1];print}
==>根据前面的讲解,这里"NR>FNR"当然就表示读取第二个文件(2.txt)每行时,"$2=a[$1];print"表示将该行的第二列替换为之前建立的那个数组中对应的元素,该元素的下标为第一列的值,然后打印替换后的该行。
如1.txt中有如下内容:
a:1
b:2
c:3
2.txt中有以下内容:
b:xiaobi:hehe
c:cat:jie
a:dog:dudu
那么打印内容为:
b:2:hehe
c:3:jie
a:1:dudu
追问
谢谢 详细的回答 那NR>FNR的作用? 以及 {$2=a[$1];print}就为什么是执行第二个文件的呢?
追答
pattern{action}为awk的固定格式,当pattern满足时,执行后面的action。读取每个文件的每行内容时都会对pattern进行判断,上面我已经说了,NR表示到目前为止总共已读入的行数,包括以前文件的行数在内,而FNR表示当前文件已读取的行数,即不包括以前的文件的行数,那么很明显,只有读取第一个文件的每行时,NR才会等于FNR,后面的每个文件都是NR>FNR了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |