[Shell] awk學習(4)-read input file

tolilong發表於2016-04-21
NR,FNR,NF的定義在  http://blog.itpub.net/24237320/viewspace-2072968/ 
FS,OFS,RS,ORS的定義在  http://blog.itpub.net/24237320/viewspace-2062456/


下面為其他的情況或者例子
1.更改field後,print內容會有發生變化
[/tmp/test]# awk '{print $2;$2=$2-10;print $0}' ff2        #$2發生變更後,$0內容也跟著發生變化
13
Jan 3 25 15 115


2.print虛擬列
[/tmp/test]# awk '{$6=$2+$3+$4+$5;print $6}' ff2
[/tmp/test]# awk '{$6=$2+$3+$4+$5;print $6,$0}' ff2         #會加上後面新增的$6列,增加的field會在$0中顯示
168 Jan 13 25 15 115 168
.....


增加了虛擬列後,相應的NF數值也會增加
[/tmp/test]# awk '{$6=$2+$3+$4+$5;print $6,$0,NF}' ff2
168 Jan 13 25 15 115 168 6


也可以減小NF
[/tmp/test]# awk '{NF=2;print NF,$0}' ff1    #NF雖然減少了,但是$0不會發生變化


3.NF定義多個分隔符
[/tmp/test]# awk 'BEGIN{FS=" |-|/"}{print $1,$2,$3,$4,$5,$6,$7,$8}' ff1
[/tmp/test]# awk -F " |-|/" '{print $1,$2,$3,$4,$5,$6,$7,$8}' ff1


4.RS 使用空白行作為換行符
[/tmp/test]# cat ff3
Jane Doe
123 Main Street
Anywhere, SE 12345-6789


John Smith
456 Tree-lined Avenue
Smallville, MW 98765-4321


Bruce Li
789 SuZhou
JiangSu China


[/tmp/test]# awk 'BEGIN{RS="";FS="\n";OFS="  $$$  "}{print $1,$2,$3}' ff3                  #RS=""使用空白行作為換行符,
Jane Doe  $$$  123 Main Street  $$$  Anywhere, SE 12345-6789
John Smith  $$$  456 Tree-lined Avenue  $$$  Smallville, MW 98765-4321
Bruce Li  $$$  789 SuZhou  $$$  JiangSu China

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24237320/viewspace-2085546/,如需轉載,請註明出處,否則將追究法律責任。

相關文章