awk は, 2つの出力先の指定しかできない. 標準出力と, ファイルへの出力. print 文 例にあげる.
scpt5_1.awk
#!/usr/local/bin/gawk -f
BEGIN{
x = 2
y = 3
z = x + y
print z
print z z > "/Users/Wtopia/code_awk/tuts/result5_1.txt" # [>>] 追加でも OK
}
scpt5_1.awk の実行結果は:
[cactus:~/code_awk/tuts]% ./scpt5_1.awk
5
[cactus:~/code_awk/tuts]% cat result5_1.txt
55
scpt5_2.awk
1 2 3 4 5 6 7 8 9 | #!/usr/local/bin/gawk -f
# scpt5_2.awk
# printf 文は改行を出力しない
BEGIN{
printf "I am a boy."
printf "You are a girl."
printf "He is my brother."
}
|
scpt5_2.awk の実行結果は:
[cactus:~/code_awk/tuts]% ./scpt5_2.awk
I am a boy.You are a girl.He is my brother.[cactus:~/code_awk/tuts]%
print 文は改行を最後につけて出力する
scpt5_3.awk
1 2 3 4 5 6 7 8 9 | #!/usr/local/bin/gawk -f
# scpt5_3.awk
# print 文は改行を出力する
BEGIN{
print "I am a boy."
print "You are a girl."
print "He is my brother."
}
|
scpt5_3.awk の実行結果は:
[cactus:~/code_awk/tuts]% ./scpt5_3.awk
I am a boy.
You are a girl.
He is my brother.
printf 文でも, その最後に改行記号, “n” をつけて出力すると, print 文と同じ結果になる.
scpt5_4.awk
1 2 3 4 5 6 7 8 9 | #!/usr/local/bin/gawk -f
# scpt5_4.awk
# printf 文には "\n" をつけて改行を出力する
BEGIN{
printf "I am a boy.\n"
printf "You are a girl.\n"
printf "He is my brother.\n"
}
|
scpt5_4.awk の実行結果は:
[cactus:~/code_awk/tuts]% ./scpt5_4.awk
I am a boy.
You are a girl.
He is my brother.
printf 文の高度な使い方
printf 文の本来の用途は, 出力の細かな制御である. これは C 言語の printf 文とほぼ同じ働きをする. 一般的にその使い方を書けば以下のようになる:
printf(書式, 出力データ 1, 出力データ 2, 出力データ 3, ...)
scpt5_5.awk
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | #!/usr/local/bin/gawk -f
# scpt5_5.awk
BEGIN{
x = 97.5
printf ":%d\n", x
printf ":%5d\n", x
printf ":%e\n", x
printf ":%7.2f\n", x
printf ":%6.2f\n", x
printf ":%5.2f\n", x
printf ":%4.2f\n", x
print "------------------"
x = 100
printf ":%o\n", x
printf ":%x\n", x
printf ":%c\n", x
print "------------------"
x = "January"
printf ":%s\n", x
printf ":%10s\n", x
printf ":%-10s\n", x
printf ":%.3f\n", x
printf ":%10.3s\n", x
printf ":%-10.3s\n", x
}
|
scpt5_5.awk の実行結果は:
[cactus:~/code_awk/tuts]% ./scpt5_5.awk
:97
: 97
:9.750000e+01
: 97.50
: 97.50
:97.50
:97.50
------------------
:144
:64
:d
------------------
:January
: January
:January
:0.000
: Jan
:Jan
printf には () を付けなくても大丈夫
scpt5_6.awk
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | #!/usr/local/bin/gawk -f
# scpt5_6.awk
BEGIN{
x = 97.5
printf ":%d\n", x
printf ":%5d\n", x
printf ":%e\n", x
printf ":%7.2f\n", x
printf ":%6.2f\n", x
printf ":%5.2f\n", x
printf ":%4.2f\n", x
print "------------------"
x = 100
printf ":%o\n", x
printf ":%x\n", x
printf ":%c\n", x
print "------------------"
x = "January"
printf ":%s\n", x
printf ":%10s\n", x
printf ":%-10s\n", x
printf ":%.3f\n", x
printf ":%10.3s\n", x
printf ":%-10.3s\n", x
}
|
scpt5_6.awk の実行結果は scpt5_5.awk と同じであるので, 省略したいと思う.