二,awk分隔符

2022-06-24 06:57:13 字數 2611 閱讀 2905

在前一篇文章中我們略微提到過"分隔符",但是並沒有細說,那麼我們今天就聊聊什麼是分隔符,awk有哪些分隔符,awk的預設分割符是空格,但是,這樣描述並不精確,因為,awk的分隔符還分為兩種,"輸入分隔符" 和 "輸出分隔符" 。

此處我們先將分隔符的概念列出,看不懂沒關係,我們會一一進行舉例,到時自然會明白。

輸入分隔符,英文原文為field separator,此處簡稱為fs

輸入分割符,預設是空白字元(即空格),awk預設以空白字元為分隔符對每一行進行分割。

輸出分割符,英文原文為output field separator,此處簡稱為ofs

awk將每行分割後,輸出在螢幕上的時候,以什麼字元作為分隔符,awk預設的輸出分割符也是空格。

光看概念是不是不容易搞明白?沒關係,我們來動手實踐一下,勝過千言萬語。

輸入分隔符

我們現在通過一些小例子,搞明白這兩個分隔符的作用,不過我們要乙個乙個來,我們先看一些"輸入分隔符"的小例子

輸入分隔符比較容易理解,當awk逐行處理文字的時候,以輸入分隔符為準,將文字切成多個片段,預設使用空格,但是,如果一段文字中沒有空格,我們可以指定以特定的文字或符號作為輸入分割符,比如下圖中的例子,我們指定使用"#"作為輸入分隔符。

[root@node1 ~]# cat test

abc#123#iuy#ddd

8ua#456#auv#ppp#7y7

[root@node1 ~]# awk -f# '' test

abc 123

8ua 456

上圖中,我們使用了-f 選項,指定了使用#號作為輸入分隔符,於是,awk將每一行都通過#號為我們分割了。

除了使用 -f 選項指定輸入分隔符,還能夠通過設定內部變數的方式,指定awk的輸入分隔符,awk內建變數fs可以用於指定輸入分隔符,但是在使用變數時,需要使用-v選項,用於指定對應的變數,比如 -v fs='#',如下圖

[root@node1 ~]# awk -v fs='#' '' test

abc 123

8ua 456

其實不管是通過-f選項,還是通過fs這個內建變數,目的都是設定指定的輸入分隔符,達到的效果是相同的,我們會在另一篇文章中單獨對awk的變數進行總結,如果你不理解這些變數,沒有關係,後面自然會明白。

而此處,我們使用了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

abc#123#iuy#ddd

8ua#456#auv#ppp#7y7

[root@node1 ~]# awk -v fs='#' -v ofs='---' '' test

abc---123

8ua---456

我們剛才解釋了awk的輸出分隔符,如果,在輸出的時候,我們想要讓兩列合併在一起顯示,不使用輸出分隔符分開顯示,該怎麼做呢?如下圖所示,藍線之上使用預設的輸出分隔符進行了分隔,而藍線之下的兩種方法均未使用輸出分隔符進行分隔,而是將兩列合在一起顯示了。

[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 將每行分割後,輸出在螢幕上也是以空格為字元分隔符 我們通過小例子搞明白這兩個分隔符的作用...