AWK-プリティプリント
これまで、AWKを使用してきました print そして printf標準出力にデータを表示する機能。しかし、printfは、これまでに見たものよりもはるかに強力です。この関数はC言語から借用されており、フォーマットされた出力を生成するときに非常に役立ちます。以下はprintfステートメントの構文です-
構文
printf fmt, expr-list
上記の構文では fmt フォーマット仕様と定数の文字列です。 expr-list フォーマット指定子に対応する引数のリストです。
エスケープシーケンス
他の文字列と同様に、フォーマットには埋め込みエスケープシーケンスを含めることができます。以下で説明するのは、AWKでサポートされているエスケープシーケンスです。
改行
次の例は Hello そして World 改行文字を使用して別々の行に-
Example
[jerry]$ awk 'BEGIN { printf "Hello\nWorld\n" }'
このコードを実行すると、次の結果が得られます-
Output
Hello
World
水平タブ
次の例では、水平タブを使用してさまざまなフィールドを表示しています-
Example
[jerry]$ awk 'BEGIN { printf "Sr No\tName\tSub\tMarks\n" }'
上記のコードを実行すると、次の結果が得られます-
Output
Sr No Name Sub Marks
垂直タブ
次の例では、各ファイルの後に垂直タブを使用しています-
Example
[jerry]$ awk 'BEGIN { printf "Sr No\vName\vSub\vMarks\n" }'
このコードを実行すると、次の結果が得られます-
Output
Sr No
Name
Sub
Marks
バックスペース
次の例では、最後のフィールドを除くすべてのフィールドの後にバックスペースを出力します。最初の3つのフィールドから最後の番号を消去します。例えば、Field 1 として表示されます Field、最後の文字がバックスペースで消去されるため。ただし、最後のフィールドField 4 なかったのでそのまま表示します \b 後 Field 4。
Example
[jerry]$ awk 'BEGIN { printf "Field 1\bField 2\bField 3\bField 4\n" }'
このコードを実行すると、次の結果が得られます-
Output
Field Field Field Field 4
キャリッジリターン
次の例では、すべてのフィールドを印刷した後、 Carriage Return 現在印刷されている値の上に次の値を印刷します。つまり、最終出力では、あなただけが見ることができますField 4、前のすべてのフィールドの上に印刷された最後のものだったので。
Example
[jerry]$ awk 'BEGIN { printf "Field 1\rField 2\rField 3\rField 4\n" }'
このコードを実行すると、次の結果が得られます-
Output
Field 4
フォームフィード
次の例では、各フィールドを印刷した後にフォームフィードを使用します。
Example
[jerry]$ awk 'BEGIN { printf "Sr No\fName\fSub\fMarks\n" }'
このコードを実行すると、次の結果が得られます-
Output
Sr No
Name
Sub
Marks
フォーマット指定子
C言語と同様に、AWKにもフォーマット指定子があります。printfステートメントのAWKバージョンは、次の変換仕様フォーマットを受け入れます-
%c
1文字を印刷します。引数が%cは数値であり、文字として扱われ、印刷されます。それ以外の場合、引数は文字列であると見なされ、その文字列の最初の文字のみが出力されます。
Example
[jerry]$ awk 'BEGIN { printf "ASCII value 65 = character %c\n", 65 }'
Output
このコードを実行すると、次の結果が得られます-
ASCII value 65 = character A
%dおよび%i
10進数の整数部分のみを出力します。
Example
[jerry]$ awk 'BEGIN { printf "Percentags = %d\n", 80.66 }'
このコードを実行すると、次の結果が得られます-
Output
Percentags = 80
%eおよび%E
[-] d.dddddde [+-] ddの形式の浮動小数点数を出力します。
Example
[jerry]$ awk 'BEGIN { printf "Percentags = %E\n", 80.66 }'
このコードを実行すると、次の結果が得られます-
Output
Percentags = 8.066000e+01
ザ・ %E フォーマット使用 E eの代わりに。
Example
[jerry]$ awk 'BEGIN { printf "Percentags = %e\n", 80.66 }'
このコードを実行すると、次の結果が得られます-
Output
Percentags = 8.066000E+01
%f
[-] ddd.dddddd形式の浮動小数点数を出力します。
Example
[jerry]$ awk 'BEGIN { printf "Percentags = %f\n", 80.66 }'
このコードを実行すると、次の結果が得られます-
Output
Percentags = 80.660000
%gおよび%G
%eまたは%f変換のいずれか短い方を使用し、有効数字以外のゼロは抑制します。
Example
[jerry]$ awk 'BEGIN { printf "Percentags = %g\n", 80.66 }'
Output
このコードを実行すると、次の結果が得られます-
Percentags = 80.66
ザ・ %G フォーマット使用 %E %eの代わりに。
Example
[jerry]$ awk 'BEGIN { printf "Percentags = %G\n", 80.66 }'
このコードを実行すると、次の結果が得られます-
Output
Percentags = 80.66
%o
符号なし8進数を出力します。
Example
[jerry]$ awk 'BEGIN { printf "Octal representation of decimal number 10 = %o\n", 10}'
このコードを実行すると、次の結果が得られます-
Output
Octal representation of decimal number 10 = 12
%u
符号なし10進数を出力します。
Example
[jerry]$ awk 'BEGIN { printf "Unsigned 10 = %u\n", 10 }'
このコードを実行すると、次の結果が得られます-
Output
Unsigned 10 = 10
%s
文字列を出力します。
Example
[jerry]$ awk 'BEGIN { printf "Name = %s\n", "Sherlock Holmes" }'
このコードを実行すると、次の結果が得られます-
Output
Name = Sherlock Holmes
%xおよび%X
符号なし16進数を出力します。ザ・%X formatは、小文字の代わりに大文字を使用します。
Example
[jerry]$ awk 'BEGIN {
printf "Hexadecimal representation of decimal number 15 = %x\n", 15
}'
このコードを実行すると、次の結果が得られます-
Output
Hexadecimal representation of decimal number 15 = f
ここで、%Xを使用して、結果を観察します-
Example
[jerry]$ awk 'BEGIN {
printf "Hexadecimal representation of decimal number 15 = %X\n", 15
}'
このコードを実行すると、次の結果が得られます-
Output
Hexadecimal representation of decimal number 15 = F
%%
シングルを印刷します % 文字であり、引数は変換されません。
Example
[jerry]$ awk 'BEGIN { printf "Percentags = %d%%\n", 80.66 }'
このコードを実行すると、次の結果が得られます-
Output
Percentags = 80%
%を含むオプションのパラメータ
と % 以下のオプションパラメータを使用できます-
幅
フィールドはにパディングされます width。デフォルトでは、フィールドにはスペースが埋め込まれますが、0フラグが使用されている場合は、ゼロが埋め込まれます。
Example
[jerry]$ awk 'BEGIN {
num1 = 10; num2 = 20; printf "Num1 = %10d\nNum2 = %10d\n", num1, num2
}'
このコードを実行すると、次の結果が得られます-
Output
Num1 = 10
Num2 = 20
先行ゼロ
先頭のゼロはフラグとして機能し、出力にスペースではなくゼロを埋め込む必要があることを示します。このフラグは、フィールドが印刷される値よりも広い場合にのみ効果があることに注意してください。次の例はこれを説明しています-
Example
[jerry]$ awk 'BEGIN {
num1 = -10; num2 = 20; printf "Num1 = %05d\nNum2 = %05d\n", num1, num2
}'
このコードを実行すると、次の結果が得られます-
Output
Num1 = -0010
Num2 = 00020
左揃え
式は、そのフィールド内で左寄せする必要があります。入力文字列が指定された文字数より少なく、左揃えにしたい場合、つまり右側にスペースを追加する場合は、%の直後で数値の前にマイナス記号(–)を使用します。
次の例では、AWKコマンドの出力がcatコマンドにパイプされて、END OF LINE($)文字が表示されます。
Example
[jerry]$ awk 'BEGIN { num = 10; printf "Num = %-5d\n", num }' | cat -vte
このコードを実行すると、次の結果が得られます-
Output
Num = 10 $
プレフィックス記号
値が正の場合でも、常に数値の前に符号が付きます。
Example
[jerry]$ awk 'BEGIN {
num1 = -10; num2 = 20; printf "Num1 = %+d\nNum2 = %+d\n", num1, num2
}'
このコードを実行すると、次の結果が得られます-
Output
Num1 = -10
Num2 = +20
ハッシュ
%oの場合、先行ゼロを提供します。%xおよび%Xの場合、結果がゼロ以外の場合にのみ、それぞれ先頭の0xまたは0Xを提供します。%e、%E、%f、および%Fの場合、結果には常に小数点が含まれます。%gおよび%Gの場合、後続のゼロは結果から削除されません。次の例はこれを説明しています-
Example
[jerry]$ awk 'BEGIN {
printf "Octal representation = %#o\nHexadecimal representaion = %#X\n", 10, 10
}'
このコードを実行すると、次の結果が得られます-
Output
Octal representation = 012
Hexadecimal representation = 0XA