awk學習手記4 print printf

2021-10-01 18:17:08 字數 2268 閱讀 3876

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