示例文件:
column文件:
xdr_file(针对column文件生成相应的数据,列分隔符为|)
col1
col2
col3
col4
col5
col6
312|250|0512|||
320|250|0512|||
314|250|0512|||
319|250|0512|||
314|250|0512|||
314|250|0512|||
328|250|0512|||
321|250|0512|||
316|250|0512|||
315|250|0512|||
321|250|0512|||
327|250|0512|||
317|250|0512|||
317|250|0512|||
目标文件:
每行转化成:
col1:312
col2:250
.......
命令如下:
awk -F '|' 'ARGIND==1 {col[NR]=$0} ARGIND==2 {print "==================xdr_record"FNR"=================";for(i=1;i<=NF;i++){print col[i]":"$i}}' test1 test2
生成的文件如下:
==========xdrrecord1=======
col1:312
col2:250
col3:0512
col4:
col5:
col6:
==========xdrrecord2=======
col1:320
col2:250
col3:0512
col4:
col5:
col6:
==========xdrrecord3=======
col1:314
col2:250
col3:0512
col4:
col5:
col6:
==========xdrrecord4=======
col1:319
col2:250
col3:0512
col4:
col5:
col6:
==========xdrrecord5=======
col1:314
col2:250
col3:0512
col4:
col5:
col6:
==========xdrrecord6=======
col1:314
col2:250
col3:0512
col4:
col5:
col6:
==========xdrrecord7=======
col1:328
col2:250
col3:0512
col4:
col5:
col6:
==========xdrrecord8=======
col1:321
col2:250
col3:0512
col4:
col5:
col6:
==========xdrrecord9=======
col1:316
col2:250
col3:0512
col4:
col5:
col6:
==========xdrrecord10=======
col1:315
col2:250
col3:0512
col4:
col5:
col6:
==========xdrrecord11=======
col1:321
col2:250
col3:0512
col4:
col5:
col6:
==========xdrrecord12=======
col1:327
col2:250
col3:0512
col4:
col5:
col6:
==========xdrrecord13=======
col1:317
col2:250
col3:0512
col4:
col5:
col6:
==========xdrrecord14=======
col1:317
col2:250
col3:0512
col4:
col5:
col6:
代码解释:
1.FNR:为当前文件的记录数
2.
ARGIND==1 {col[NR]=$0} 当文件为第一个文件时,将文件读入数组col中
e.g 有两个文件a 和b
awk '{if(ARGIND==1){print "处理a文件"} if(ARGIND==2){print "处理b文件"}}' a b
文件处理的顺序是先扫描完a文件,再扫描b文件
NR 已经读出的记录数
FNR 当前文件的记录数
上面的例子也可以写成这样:
awk 'NR==FNR{print "处理文件a"} NR > FNR{print "处理文件b"}' a b
输入文件a和b,由于先扫描a,所以扫描a的时候必然有NR==FNR,然后扫描b的时候,FNR从1开始计数,而NR则接着a的行数继续计数,所以NR > FNR