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...