shell中awk printf的用法

打印輸出時,可能須要指定字段間的空格數,從而把列排整齊。在print函數中使用製表符並不能保證獲得想要的輸出,所以,能夠用printf函數來格式化特別的輸出。html

printf函數返回一個帶格式的字符串給標準輸出,如同C語言中的printf語句同樣。printf語句包括一個加引號的控制串,控制串中可能嵌有若干格式說明和修飾符。控制串後面跟一個逗號,以後是一列由逗號分隔的表達式。printf函數根據控制串中的說明編排這些表達式的格式。與print函數不一樣的是, printf不會在行尾自動換行。所以,若是要換行,就必須在控制串中提供轉義字符\n。linux

每個百分號和格式說明都必須有一個對應的變量。要打印百分號就必須在控制串中給出兩個百分號。請參考print轉義字符和printf修飾符。格式說明由百分號引出,另外還列出了printf所用的格式說明符。shell

printf使用的轉義字符函數

轉義字符 定義
c 字符
s 字符串
d 十進制整數
ld 十進制長整數
u 十進制無符號整數
lu 十進制無符號長整數
x 十六進制整數
lx 十六進制長整數
o 八進制整數
lo 八進制長整數
e 用科學記數法(e 記數法)表示的浮點數
f 浮點數
g 選用e或f中較短的一種形式

 

printf的修飾符spa

字符 定義
- 左對齊修飾符
# 顯示8 進制整數時在前面加個0
顯示16 進制整數時在前面加0x
+ 顯示使用d 、e 、f 和g 轉換的整數時,加上正負號+或-
0 用0而不是空白符來填充所顯示的值

 

printf的格式說明符code

格式說明符 功能
%c 打印單個ASCII 字符
printf("The character is %c\n",x)
輸出: The character is A
%d 打印一個十進制數
printf("The boy is %d years old\n",y)
輸出:The boy is 15 years old
%e 打印數字的e 記數法形式
printf("z is %e\n",z) 打印: z is 2.3e+0 1
%f 打印一個浮點數
printf("z is %f\n", 2.3 * 2)
輸出: z is 4.600000
%o 打印數字的八進制
printf("y is %o\n",y)
輸出:z is 17
%s 打印一個字符串
print("The name of the culprit is %s\n",$1)
輸出:The name of the culprit is Bob Smith
%x 打印數字的十六進制值
printf("y is %x\n",y)
輸出:x is f

 

打印變量時,輸出所在的位置稱爲"域"(field),域的寬度(width)是指該域中所包含的字符個數。下面這些例子中, printf控制串裏的管道符(豎槓)是文本的一部分, 用於指示格式的起始與結束。
範例htm

echo "Linux" | awk '{printf "|%-15s|\n",$1}'
|Linux          |

說明:對於echo命令的輸出,Linux是經管道發給awk。printf函數包含一個控制串。百分號讓printf作好準備,它要打印一個佔15個格、向左對齊的字符串,這個字符串夾在兩個豎槓之間,而且以換行符結尾。百分號後的短劃線表示左對齊。控制串後面跟了一個逗號和$1。printf將根據控制串中的格式說明來格式化字符串Linux。字符串

範例get

echo "Linux" | awk '{printf "|%15s|\n",$1}'
|          Linux|

說明:字符串Linux被打印成一個佔15 格、向右對齊的字符串,夾在兩個豎槓之間,以
換行符結尾。it

範例

cat employees
Tom   Jones 4424 5/12/66 543354
Mary  Adams 5346 11/4/63 28765
Sally Chang 1654 7/22/54 650000
Billy Black 1683 9/23/44 336500
$ awk  '{printf "The name is: %-15s ID is %8d\n",$1,$3}' employees
The name is Tom             ID is 4424
The name is Mary            ID is 5346
The name is Sally           ID is 1654
The name is Billy           ID is 1683

說明:要打印的字符串放置在兩個雙引號之間。第一個格式說明符是%-15s,它對應的參數是$1,緊挨着控制串的右半邊引號後面的那個逗號。百分號引出格式說明:短劃線表示左對齊,15s表示佔15格的字符串。這條命令用來打印一個左對齊、佔15格的字符串,後面跟着字符串的ID和一個整數。

格式:%8d表示在字符串的這個位置打印$2 的十進制(整數)值。這個整數佔8格,向右對齊。您也能夠選擇將加引號的字符串和表達式放在圓括號裏。

 

轉http://www.linuxawk.com/jiaocheng/83.html

相關文章
相關標籤/搜索