Linux常用基本命令:三劍客命令之-awk格式化動作

ghostwu發表於2018-05-26

我們之前說過,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   

 

相關文章