一、awk分隔符
awk的默認分割符是空格,但是,這樣描述並不精確,因為,awk的分隔符還分為兩種,"輸入分隔符" 和 "輸出分隔符" 。
(1)輸入分隔符:英文原文為field separator,此處簡稱為FS。默認是空白字符(即空格),awk默認以空白字符為分隔符對每一行進行分割。
(2)輸出分割符:英文原文為output field separator,此處簡稱為OFS。awk將每行分割后,輸出在屏幕上的時候,以什么字符作為分隔符,awk默認的輸出分割符也是空格。
二、輸入分隔符(FS)
輸入分隔符比較容易理解,當awk逐行處理文本的時候,以輸入分隔符為准,將文本切成多個片段,默認使用空格,但是,如果一段文字中沒有空格,我們可以指定以特定的文字或符號作為輸入分割符,比如下圖中的例子,我們指定使用"#"作為輸入分隔符。
上圖中,我們使用了-F 選項,指定了使用#號作為輸入分隔符,於是,awk將每一行都通過#號為我們分割了。
除了使用 -F 選項指定輸入分隔符,還能夠通過設置內部變量的方式,指定awk的輸入分隔符,awk內置變量FS可以用於指定輸入分隔符,但是在使用變量時,需要使用-v選項,用於指定對應的變量,比如 -v FS='#',如下圖:
其實不管是通過-F選項,還是通過FS這個內置變量,目的都是設置指定的輸入分隔符,達到的效果是相同的。
而此處,我們使用了awk中的一個選項,就是-F,還記得我們之前總結的awk的使用語法嗎。我們說過,awk的語法如下:awk [options] 'Pattern{Action}' file 而-F,就是options的一種,用於指定輸入分隔符。-v也是options的一種,用於設置變量的值。再結合之前的文章,我們已經將options 、pattern 、action都簡單的應用了一遍,好了,我們已經"會用"awk了。
三、輸出分隔符(OFS)
awk將每行分割后,輸出在屏幕上的時候,以什么字符作為分隔符,就叫做輸出分隔符。
3.1使用awk的內置變量OFS來設定awk的輸出分隔符,當然,使用變量的時候要配合使用-v選項,示例如下:
3.1-1問題:如果文本文件中的分隔符為#,但是系統默認輸入分隔符為空格,就會產生如下問題:解決方法就是同時指定輸入、輸出分隔符。
3.2同時指定輸入分隔符和輸出分割符,示例如下:
或者
3.3輸出時合並顯示(不使用輸出分隔符分開顯示)
awk '{print $1 $2}' 表示每行分割后,將第一列(第一個字段)和第二列(第二個字段)連接在一起輸出。
awk '{print $1,$2}' 表示每行分割后,將第一列(第一個字段)和第二列(第二個字段)以輸出分隔符隔開后顯示。
【參考文章:http://www.zsythink.net/archives/1357】