RS:Record Separator,記錄分隔符
ORS:Output Record Separate,輸出目前記錄分隔符
FS:Field Separator,字段分隔符
OFS:Out of Field Separator,輸出字段分隔符
PS:RS、ORS、FS、OFS的英文解釋絕不是這樣的,這裡隻是解釋清楚。建議去閱讀awk的英文讀物,其中解釋了縮寫的含義。
什麼是field(字段),什麼是record(記錄行)?
示例:
1.txt
i am a student.
i like to swim
hello moto
1代表第一個記錄行,2代表第二個記錄行,3代表第三個記錄行。通過觀察我們可以知道總共有3個記錄行(record)。
看看第一行:“i am a student”,這一行的每個單詞都是一個字段(field)。“i”是一個字段,“am”是一個字段,“a”是一個字段,“student”是一個字段,該行總共有4個字段。
RS與ORS
RS:記錄行分隔符
a\n
b\n
c\n
d\n
e\n
該文本總共有5行,每一行都有一個換行符“\n”。是以每行記錄都是以“\n”為一個(換行的)标志。
可以用一下方法來了解:
找到某某标志,讓每個某某後的内容重新變成一行
示例
a|b|c
代碼:awk 'BEGIN{ RS="|"; } { print $0 }'
a
b
ORS:可以看成RS的逆向過程
c
可以這樣了解:
觀察每一行的“換行符号”,然後将“換行符号”替換成你想要的符号。
awk 'BEGIN{ ORS="----" }{ print $0 }' 1.txt
a----b----c----
FS:字段分隔符
FS預設值為“ (空格)”,如“hello moto”.
在“hello moto”中有一個空格,空格就是hello與moto的分隔符(separator),而hello與moto就為字段(files)。awk以空格來區分。
在看看“i----love----you”,如果我們用指令“awk “{ print $1 }””會看到結果為:
i----love----you
如果想列印出三個字母,通過觀察可發現“----”為分隔符。
awk 'BEGIN{ FS="----";}{ print $1,$2,$3 }' filename
i love you
OFS:輸出的字段分隔符。
這麼解釋吧,如上例中“i----love----you”,“----”為分隔符(FS),如果我們想改為用其他符号顯示可以這樣:
awk 'BEGIN{ FS="----";OFS="*****" }{ print $1,$2,$3 }' filename
i*****love*****you
其實OFS還有一個例子
echo "abc" | awk '{ OFS="." } { NF=NF; print NF,$0}'
結果
1.abc
PS:RS與ORS可以說成是一個互逆的過程()也可以看成一個替換的過程,但是看成互逆的過程比較好了解;FS與OFS就是一個替換的過程。
Have a nice day!!!
本文轉自 轉身撞牆角 51CTO部落格,原文連結:http://blog.51cto.com/chentianwang/1682359