AWK改變輸入輸出分隔符例項分析

2022-03-26 09:27:57 字數 1442 閱讀 6790

awk預設從stdin接受資料,列印文字到stdout。

awk的預設輸入和輸出分隔符:

fs : 輸入字段分隔符,預設空格。

rs : 輸入行分隔符,預設\n。

ofs : 輸出字段分隔符,預設空格。

ors : 輸出行分隔符,預設\n。

例項:通過改變預設的內建變數使多行變成一行

file.txt  ( 每個人的資訊條數不確定,區分是乙個空行 )

路人甲

13777707771

手機:

010-12345678

路人乙13912344321

手機:

010-56784321

87654221

想要把格式變為:

先給出最終命令,再看分析。

awk 'begin print "\n"}' ./t.txt
分析:空行是由兩個連續的\n形成的,fs為\n,那麼兩個連續的\n會形成乙個null,正好是乙個rs,這樣就會把乙個人的資訊讀入為一行。現在就是兩行資料了。下一步就是輸出。

因為預設的ofs就是空格,ors就是\n,這就是我們想要的,所以

awk 'begin' ./t.txt
輸出的結果為:

這就是我們想要的結果,但是從$1輸出到$4不是個好主意,假設乙個人最多的記錄不止4行呢。

這時我想直接print $0不就行了,和 print $1,$2,$3,$4不是一樣的,可結果卻是:

awk 'begin' ./t.txt
路人甲手機:010-12345678

路人乙手機:010-56784321

和想要的結果有些差別呢,為什麼呢?因為ofs在輸出$0時不起作用,ofs只用在輸出多個域時會插入到每個域之間。

這時我想那就用for迴圈把每行的每個域print出來好了。於是

awk 'begin}' ./t.txt
路人甲手機:010-12345678

路人乙手機:010-56784321

結果好像沒什麼變化,因為for迴圈的每個print之後會輸出乙個ors,可以指定乙個可見的ors試試看就知道了。

所以需要把ors指定為"",手動輸出換行符。這個就是最開始的命令了。

當我們只指定fs="\n",而不指定rs的時候,rs預設為"\n",這個時候rs的優先順序高

可以看到"\n"是作為了行分隔符

上面"\n"是作為了fs分隔符,因為rs被重新定義了

AWK改變輸入輸出分隔符例項分析

awk預設從stdin接受資料,列印文字到stdout。awk的預設輸入和輸出分隔符 fs 輸入字段分隔符,預設空格。rs 輸入行分隔符,預設 n。ofs 輸出字段分隔符,預設空格。ors 輸出行分隔符,預設 n。例項 通過改變預設的內建變數使多行變成一行 file.txt 每個人的資訊條數不確定,...

二,awk分隔符

在前一篇文章中我們略微提到過 分隔符 但是並沒有細說,那麼我們今天就聊聊什麼是分隔符,awk有哪些分隔符,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...