为什么这个命令中有printf和print?

Arc*_*ing 1 debian sed printing awk fail2ban

在学习时,fail2ban我遇到了这个命令。我以前从未使用awk过,只与sed. 我不明白为什么有printfprint,有:

awk '{ printf "# "; print; }' /etc/fail2ban/jail.conf | sudo tee /etc/fail2ban/jail.local
Run Code Online (Sandbox Code Playgroud)

为什么两者都在?

顺便说一句,如果你知道,我邀请你在评论中分享一个 sed 版本。

Ini*_*ian 5

第一种printf是将字符附加#到输入文件的每一行,用awk表示$0,然后#使用print子句将修改后的行(之前添加的)打印到控制台。

您可以忽略一个并在命令行上运行它以查看哪个做了什么。

seq 1 5 | awk '{ printf "# "; print; }'
# 1
# 2
# 3
# 4
# 5
Run Code Online (Sandbox Code Playgroud)

它也许可以简单地写成 withprintf或 just printwithalone 作为

awk '{ printf "# %s\n" , $0  }'
Run Code Online (Sandbox Code Playgroud)

您需要换行符,\n因为printf默认情况下不打印它。

awk '{ print "# "$0  }'
Run Code Online (Sandbox Code Playgroud)