天天看點

awk之RS、ORS與FS、OFS

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