awk 脚本学习 二

示例文件:

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


你可能感兴趣的:(linux学习)