我們之前說過,awk是一個超強的文本格式化工具,而本文的printf動作就是經常用來做格式化文本的。使用方式跟c語言的printf差不多. 1,printf預設不會回車換行 2,我們需要像c語言一樣,用轉義字元\n,輸出換行 小結: 1)使用printf動作 輸出的文本不會換行,如果需要換行,可以在 ...
我們之前說過,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語言一樣,用轉義字元\n,輸出換行
ghostwu@dev:~/linux/awk$ awk 'BEGIN{printf "%s\n", "ghostwu"}' ghostwu
小結:
1)使用printf動作 輸出的文本不會換行,如果需要換行,可以在對應的"格式替換符"後加入"\n"進行轉義
2)使用printf動作時,"指定的格式" 與 "被格式化的文本" 之間,需要用"逗號"隔開
3)使用printf動作時,"格式"中的"格式替換符"必須與 "被格式化的文本" 一一對應
3,一一對應的 “被格式化的文本” 與 "格式替換符
ghostwu@dev:~/linux/awk$ awk '{printf "第一列: %s 第二列: %s 第三列: %s\n", $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\t %s\t %s\n", $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\t %10s\t %10s\n", "姓名", "年齡", "性別"} {printf "%10s\t %10s\t %10s\n", $1, $2, $3 }' ghostwu.txt 姓名 年齡 性別 ghostwu 20 man zhangsan 22 woman lisi 23 woman ghostwu@dev:~/linux/awk$ awk -v FS="-" 'BEGIN{printf "%-10s\t %-10s\t %-10s\n", "姓名", "年齡", "性別"} {printf "%-10s\t %-10s\t %-10s\n", $1, $2, $3 }' ghostwu.txt 姓名 年齡 性別 ghostwu 20 man zhangsan 22 woman lisi 23 woman