このコマンドにprintfとprintの両方があるのはなぜですか?

このコマンドにprintfとprintの両方があるのはなぜですか?

勉強してfail2banこのような命令を見つけました。私はawk以前それをやったことがなく、ただ働いていましたsed。なぜ両方があり、そこにいるのか理解できませprintfprint

awk '{ printf "# "; print; }' /etc/fail2ban/jail.conf | sudo tee /etc/fail2ban/jail.local

なぜ両方がそこにありますか?

ところで、もしご存知であればコメントでsedバージョンを共有してください。

答え1

1つ目printfは、入力ファイルの各行に文字を追加してから、その#句を使用して変更された行(以前に追加された行)をコンソールに印刷することです。awk$0#print

そのうちの1つを無視してコマンドラインから実行して、何が何をしているのかを確認できます。

seq 1 5 | awk '{ printf "# "; print; }'
# 1
# 2
# 3
# 4
# 5

printf単に with alone で書くことも、 just with printalone で書くこともできます。

awk '{ printf "# %s\n" , $0  }'

改行文字はデフォルトでは印刷されないため、\n必要です。printf

awk '{ print "# "$0  }'

関連情報