我們之前說過,awk是一個超強的文字格式化工具,而本文的printf動作就是經常用來做格式化文字的。使用方式跟c語言的printf差不多.
1,printf預設不會回車換行
ghostwu@dev:~/linux/awk$ awk `BEGIN{print "abc"}` abc ghostwu@dev:~/linux/awk$ awk `BEGIN{printf "abc"}` abcghostwu@dev:~/linux/awk$
2,我們需要像c語言一樣,用轉義字元
,輸出換行
ghostwu@dev:~/linux/awk$ awk `BEGIN{printf "%s ", "ghostwu"}` ghostwu
小結:
1)使用printf動作 輸出的文字不會換行,如果需要換行,可以在對應的”格式替換符”後加入”
“進行轉義
2)使用printf動作時,”指定的格式” 與 “被格式化的文字” 之間,需要用”逗號”隔開
3)使用printf動作時,”格式”中的”格式替換符”必須與 “被格式化的文字” 一一對應
3,一一對應的 “被格式化的文字” 與 ”格式替換符
ghostwu@dev:~/linux/awk$ awk `{printf "第一列: %s 第二列: %s 第三列: %s ", $1, $2, $3}` ghostwu.txt 第一列: ghostwu 第二列: 20 第三列: man 第一列: zhangsan 第二列: 22 第三列: woman 第一列: lisi 第二列: 23 第三列: woman
4,用 -v FS指定輸入分隔符,然後用printf格式化分隔後的文字
ghostwu@dev:~/linux/awk$ cat ghostwu.txt ghostwu-20-man zhangsan-22-woman lisi-23-woman ghostwu@dev:~/linux/awk$ awk -v FS=- `{printf "%s %s %s ", $1, $2, $3}` ghostwu.txt ghostwu 20 man zhangsan 22 woman lisi 23 woman
5,常用的字串格式化, 10s -10s. 10s:字串寬度為10,不足10位,左邊補空格,就形成了右對齊方式, -10s就是左對齊方式
ghostwu@dev:~/linux/awk$ awk -v FS="-" `BEGIN{printf "%10s %10s %10s ", "姓名", "年齡", "性別"} {printf "%10s %10s %10s ", $1, $2, $3 }` ghostwu.txt 姓名 年齡 性別 ghostwu 20 man zhangsan 22 woman lisi 23 woman ghostwu@dev:~/linux/awk$ awk -v FS="-" `BEGIN{printf "%-10s %-10s %-10s ", "姓名", "年齡", "性別"} {printf "%-10s %-10s %-10s ", $1, $2, $3 }` ghostwu.txt 姓名 年齡 性別 ghostwu 20 man zhangsan 22 woman lisi 23 woman