awk中如果输出字符的话,有两种处理方式。printf和print,两种方式存在着不同,下面简要的说明下。
printf:可以自定义输出的模式,另外输出内容之后不自动换行
print:输出内容之后自动换行
example:
file
11111_22222_33333_44444_55555_66666
awk -F’_’ ‘{for(i=1;i<=NF;i++)print $i}’ file
11111
22222
33333
44444
55555
66666
awk -F’_’ ‘{for(i=1;i<=NF;i++)printf $i}’ file
111112222233333444445555566666
所以可以看出,print输出一个内容之后,自动换行,但是printf不会这样,另外如果我们需要在处理文本的过程中输出换行符的话,可以print “”,输出一个空字符就表示输出了一个换行符。
file2
name1 1 2 3 4 5 6
name2 2 3 4 5 6 7
name3 3 4 5 6 7 8
如果想要的结果为
name1 12 34 56
name2 23 45 67
name3 34 56 78
处理方式为:
awk '{printf $1;for(i=2;i<=NF;i=i+2)printf " "$i$i+1;print ""}' file2
注意开始的时候输出的是$1,此时注意不会输出换行符,另外如果输出$1$2这样子输出的话,不会输出字段分隔符空格,但是如果输出$1,$2的话,中间有逗号的话,就会输出字段分隔符。另外最后的print””,表示输出一个换行符进行下一行的处理。