awk學習手記4-print、printf、
前面學習的一些內容讓我們認識到awk一些基礎的的文字匹配及操作能力。現在我們開始更加深入的學習其最強大的功能-格式化。
在之前的例項中,我們通常使用print來輸出文字,但是print只能夠實現簡單的文字的輸出功能,並不能對文字格式進行改變。如果想要改變文字格式,則需要使用printf動作。
printf動作和c語言中的printf函式很相似,只是有略微的不同,下面我們開始在具體的示例中學習printf動作。
作為孿生兄弟,我們首先看一下awk的print動作和printf動作的區別:
[root@my127 awk]
# awk '' 4.txt
root
123www
[root@my127 awk]
# awk '' 4.txt
root123www[root@my127 awk]
#
printf動作和c語言中的printf命令一樣,都不會輸出換行符,缺省會在文字輸出在同一行。和c中printf命令一樣,awk的printf動作也有「格式替代符」
[root@my127 awk]# awk 『』 4.txt
root
123www
**注意:awk中printf指定的「格式」和文字之間需要用逗號,隔開!**實際上我們建議awk語句program中所有的『分子』都相互隔開。
printf動作和printf命令第二個不同點是:printf命令可以只用乙個格式替代符,也就是說當語句中傳入了多個引數,那麼這多個引數可以重複使用同乙個替代符,示例:
[root@my127 awk]
# printf "%s\n" 1 2 3 4 512
345
但是在awk中,我們的格式替代符數量必須等於傳參數量,換句話說,格式替代符必須與引數一一對應,示例如下:
[root@my127 awk]
# awk 'begin'
1
[root@my127 awk]
# awk 'begin'12
345
總結一下printf動作使用須知:
1、使用printf動作不會換行,如果需要換行可以在對應的「格式替代符」後面加入「\n」進行轉義換行。
2、使用printf動作時,需要將「格式」與「被格式化的文字」用逗號隔開。
3、使用printf動作時,「格式」中的格式替代符必須與被格式化的文字一一對應。
格式化舉例
例一、
利用printf對文字的每一列進行格式化
[root@my127 awk]
# cat 7.txt
root test prom tmp
123 456 78900 00
[root@my127 awk]
# awk '' 7.txt
第一列:root 第二列:test
第一列:123 第二列:456
例二、
與fs結合使用,先來指定分隔符,在進行格式化。
fs負責切割,printf負責格式化:
[root@my127 awk]
# cat 6.txt
qwe#rty#yui#iop
asd#fgh#jkl#zxc
mnb#plm#ijn#awr
[root@my127 awk]
# awk -v fs='#' '' 6.txt
第一列:qwe 第二列:rty
第一列:asd 第二列:fgh
第一列:mnb 第二列:plm
例三、
利用awk的begin模式,結合printf動作,輸出乙個**樣式的文字。
[root@my127 awk]
# awk -v fs='#' 'begin' 6.txt
使用者名稱 使用者id
qwe rty
asd fgh
mnb plm
生產環境下,printf動作使用頻率超高,需要多用多練習,才能靈活使用printf動作。 《linux c程式設計指南》學習手記4
7.1 檔案系統簡介 7.1.1 檔案 檔案許可權 r w x 訪問許可權 檔案所有者 檔案所有者同組使用者 其他使用者 7.1.2 索引節點 7.1.3 檔案系統 樹形層次結構系統,檔案最終都歸結到根目錄 上 7.2 基於檔案描述符的io操作 7.2.1檔案的建立 開啟與關閉 1 檔案的建立 cr...
《linux c程式設計指南》學習手記4
7.1 檔案系統簡介 7.1.1 檔案 檔案許可權 r w x 訪問許可權 檔案所有者 檔案所有者同組使用者 其他使用者 7.1.2 索引節點 7.1.3 檔案系統 樹形層次結構系統,檔案最終都歸結到根目錄 上 7.2 基於檔案描述符的io操作 7.2.1檔案的建立 開啟與關閉 1 檔案的建立 cr...
組合語言 手記4
簡單的彙編指令 cpu執行後,暫存器中的資料改變為如下 cpu訪問記憶體單元時要給出記憶體單元的位址。所有的記憶體單元構成的儲存空間是乙個一維的線性空間。這個唯一的位址就是實體地址。16位結構描述了乙個cpu具有一下幾個方面特徵 1 運算器一次最多可以處理16位的資料。2 暫存器的最大寬度為16位。...