- 论坛徽章:
- 0
|
本帖最后由 ambious888 于 2010-12-11 00:26 编辑
回复 8# lkk2003rty
谢谢解答,这谢谢来的有点晚啊,我也对你的命令详细的分析下,还有不明白或者不对的地方请多多指教
awk 'BEGIN{FS=":"}FNR==NR{a[$2]=$1;next}{if($1 in a) a[$1]=a[$1]":"$2}END{for(i in a)if(index(a,":"))print a;else print a":null"}' file1 file2- [size=3] awk ‘
- BEGIN{FS=":"}
- FNR==NR 标识第一个文件
- {a[$2]=$1;next} 把第一个文件的第一个域放到以第二个域为下标的数组a中 如a[x] = a; a[y] = b a[z] = c
- {if($1 in a) 从分析来看这里应该是该处理第二个文件了,如果第二个文件的第一个域在数组中,也就是x,y,z。
- 这里没有明显的标识说这里就是处理的第二个文件,不像之前用的NR!=FNR或者NR>FNR都是第二个文件的标识了
- a[$1]=a[$1]":"$2} 如果满足第二个文件的第一个域在数组中,数组a就以第二个文件的第一个域为下标,比如就是a[x]=a:pwd1
- END
- {for(i in a) [b][color=Red]这里有个疑问[/color][/b],这里的i,应该是在数组的下标中吧,还是在数组的值中?要是在值中要不后面的a[i]怎么解释?
- if(index(a[i],":")) 这里是返回a[i]在句子中第一次出现的位置, [b][color=Red]这里有个疑问[/color][/b],这里的冒号是分隔符还是整个句子的意思,有点不明白???能解释下吗?
- print a[i]; 如果找到的位置不是0就全部打印出来
- else
- print a[i]":null"}' 否则就是打印null
- file1 第一个文件
- file2 第二个文件[/size]
复制代码 |
|