在前一篇文章中我們略微提到過"分隔符",但是並沒有細說,那麼我們今天就聊聊什麼是分隔符,awk有哪些分隔符,awk的預設分割符是空格,但是,這樣描述並不精確,因為,awk的分隔符還分為兩種,"輸入分隔符" 和 "輸出分隔符" 。
此處我們先將分隔符的概念列出,看不懂沒關係,我們會一一進行舉例,到時自然會明白。
輸入分隔符,英文原文為field separator,此處簡稱為fs
輸入分割符,預設是空白字元(即空格),awk預設以空白字元為分隔符對每一行進行分割。
輸出分割符,英文原文為output field separator,此處簡稱為ofs
awk將每行分割後,輸出在螢幕上的時候,以什麼字元作為分隔符,awk預設的輸出分割符也是空格。
光看概念是不是不容易搞明白?沒關係,我們來動手實踐一下,勝過千言萬語。
輸入分隔符
我們現在通過一些小例子,搞明白這兩個分隔符的作用,不過我們要乙個乙個來,我們先看一些"輸入分隔符"的小例子
輸入分隔符比較容易理解,當awk逐行處理文字的時候,以輸入分隔符為準,將文字切成多個片段,預設使用空格,但是,如果一段文字中沒有空格,我們可以指定以特定的文字或符號作為輸入分割符,比如下圖中的例子,我們指定使用"#"作為輸入分隔符。
[root@node1 ~]# cat test上圖中,我們使用了-f 選項,指定了使用#號作為輸入分隔符,於是,awk將每一行都通過#號為我們分割了。abc#123#iuy#ddd
8ua#456#auv#ppp#7y7
[root@node1 ~]# awk -f# '' test
abc 123
8ua 456
除了使用 -f 選項指定輸入分隔符,還能夠通過設定內部變數的方式,指定awk的輸入分隔符,awk內建變數fs可以用於指定輸入分隔符,但是在使用變數時,需要使用-v選項,用於指定對應的變數,比如 -v fs='#',如下圖
[root@node1 ~]# awk -v fs='#' '' test其實不管是通過-f選項,還是通過fs這個內建變數,目的都是設定指定的輸入分隔符,達到的效果是相同的,我們會在另一篇文章中單獨對awk的變數進行總結,如果你不理解這些變數,沒有關係,後面自然會明白。abc 123
8ua 456
而此處,我們使用了awk中的乙個選項,就是-f,還記得我們之前總結的awk的使用語法嗎。
我們說過,awk的語法如下
awk [options] 'pattern' file
而-f,就是options的一種,用於指定輸入分隔符。
-v也是options的一種,用於設定變數的值。
再結合之前的文章,我們已經將options 、pattern 、action都簡單的應用了一遍,好了,我們已經"會用"awk了。
輸出分隔符
那麼什麼是輸出分隔符呢?聰明的你應該已經發現了,當awk為我們輸出每一列的時候,會使用空格隔開每一列,其實,這個空格,就是awk的預設的輸出分隔符,下圖中紅線標註的空格部分,就是awk的預設的輸出分隔符。
輸出分割符的意思就是:當我們要對處理完的文字進行輸出的時候,以什麼文字或符號作為分隔符。
我們可以使用awk的內建變數ofs來設定awk的輸出分隔符,當然,使用變數的時候要配合使用-v選項,示例如下
[root@node1 ~]# cat test1現在,我們可以同時指定輸入分隔符和輸出分割符了,示例如下abc 123 iuy ddd
8ua 456 auv ppp 7y7
[root@node1 ~]# awk -v ofs="+++" '' test1
abc+++123
8ua+++456
[root@node1 ~]# cat test我們剛才解釋了awk的輸出分隔符,如果,在輸出的時候,我們想要讓兩列合併在一起顯示,不使用輸出分隔符分開顯示,該怎麼做呢?如下圖所示,藍線之上使用預設的輸出分隔符進行了分隔,而藍線之下的兩種方法均未使用輸出分隔符進行分隔,而是將兩列合在一起顯示了。abc#123#iuy#ddd
8ua#456#auv#ppp#7y7
[root@node1 ~]# awk -v fs='#' -v ofs='---' '' test
abc---123
8ua---456
[root@node1 ~]# cat test1細心如你一定發現了,上圖中的示例在語法上的區別就是,乙個有"逗號",乙個沒有"逗號"。abc 123 iuy ddd
8ua 456 auv ppp 7y7
[root@node1 ~]# awk '' test1
abc123
8ua456
[root@node1 ~]# awk '' test1
abc123
8ua456
awk '' 表示每行分割後,將第一列(第乙個字段)和第二列(第二個字段)連線在一起輸出。
awk '' 表示每行分割後,將第一列(第乙個字段)和第二列(第二個字段)以輸出分隔符隔開後顯示。
awk linux 分隔 awk多分隔符
awk的 f引數可以指定新的分隔符,有些時候可能需求指定多個分隔符,比如下面的內容 root n1 netstat an grep estab udp 0 0 192.168.1.120 35570 212.47.249.141 123 established udp 0 0 192.168.1.1...
有關awk欄位分隔符
echo a b c d awk 我的理解是應該把輸出顯示為如下的方式 a b c d dan但執行的結果不是這樣的 a b c d 為什麼啊 echo a b c d awk 或echo a b c d awk begin 或echo a b c d awk 這個方法我知道 我是想知道為什麼ofs...
AWK學習(二) 分隔符
awk學習系列 awk學習 一 基礎 awk學習 二 分隔符 輸入分隔符 field separator 預設是空白字元 空格 為分隔符對每一行進行分割 輸出分隔符 output field separator 將每行分割後,輸出在螢幕上也是以空格為字元分隔符 我們通過小例子搞明白這兩個分隔符的作用...