二.AWK內置變量
1. FS 輸入字段分隔符
awk默認的字段分隔符是空格,如果你的輸入文件中不是以空格作為字段分隔符, 那麽你可以使用-F參數來指定分隔符。例如
awk -F, ‘/pattern/ {action}‘ input-file
你也可以設置內置變量FS來完成,FS內置變量只能在BEGIN區域使用。
awk ‘BEGIN {FS=","} {print $2, $3}‘ input-file
當你遇到包含多種字段分隔符時,不用擔心,FS完全能搞定,比如:
awk ‘BEGIN {FS="[,:;]"} /pattern/ {action}‘
上面這條命令指定了字段分隔符時逗號,冒號,分號。
2. OFS 輸出字段分隔符
FS是輸入字段分隔符,OFS是輸出字段分隔符。OFS會被打印在輸出行的連續兩個字段之間。默認情況下,awk會以空格作為輸出字段分隔符
例如:
awk -F, ‘BEGIN {OFS=":"} /pattern/ {action}‘ input-file
上面這行代碼指定了輸出字段分隔符為冒號。
請註意print語句中使用逗號和不使用分號的區別:
使用逗號,則awk在字段之間使用OFS作為輸出字段分隔符;
如果不使用分號,則不會使用OFS作為輸出字段分隔符;
3.RS 記錄分隔符
awk默認的記錄分隔符是換行符,我們也可以指定記錄分隔符,例如:
awk -F, ‘BEGIN {RS=";"} /pattern/ {action}‘ input-file
上面這行代碼中,設置分號作為記錄分隔符,那awk就會把分號作為每行直接的分隔符。
4.ORS輸出記錄分隔符
RS是出入記錄分隔符,ORS是輸出記錄分隔符。awk默認使用換行符作為輸出記錄分隔符。
5.NR 記錄序號
NR變量非常有用,在循環內部標識記錄序號。在END區域時,代表輸入文件的總記錄數
6.FILENAME當前記錄的文件名
當使用awk處理多個輸入文件時,FILENAME就顯得非常有用,它代表awk當前正在處理的文件。
7.FNR 當前文件的NR
NR代表當前awk處理的記錄的行號, 在給awk傳遞兩個文件時,NR會在多個文件中持續增加,當處理到第二個文件時,NR不會被重置為1, 而是在前一個文件的NR基礎上繼續增加。
FNR則只代表當前文件正在處理的記錄的行號,不會在第二個文件中繼續增加, 當處理到第二個文件時,會重置為1
二.AWK內置變量