我在bash脚本中运行以下命令:
echo `netstat -plten | grep -i autossh | awk '{print $4}'` >> /root/logs/autossh.txt
输出显示在一行中:
127.0.0.1:25001 127.0.0.1:15501 127.0.0.1:10001 127.0.0.1:20501 127.0.0.1:15001 127.0.0.1:5501 127.0.0.1:20001
我希望每个IP都能逐行显示。我需要做什么来使用awk命令逐行显示输出
答案 0 :(得分:1)
只需删除echo
和子shell:
netstat -plten | grep -i autossh | awk '{print $4}' >> /root/logs/autossh.txt
awk
已经每行打印一个,但是当你将它们传递给echo
时,它会解析它的参数并打印它们,每个参数之间都有一个空格。 awk
输出的每一行都会成为echo
的单独参数,因此您会丢失行结尾。
当然,awk
也可以进行模式匹配,因此不需要grep
:
netstat -plten | awk '/autossh/ {print $4}' >> /root/logs/autossh.txt
gawk
至少你可以忽略它
netstat -plten | awk 'BEGIN {IGNORECASE=1} /autossh/ {print $4}' >> /root/logs/autossh.txt
或正如Ed Morton指出的那样,你可以做任何awk
netstat -plten | awk 'tolower($0) ~ /autossh/ {print $4}' >> /root/logs/autossh.txt
答案 1 :(得分:0)
您可以引用命令替换的结果,以防止shell执行分词。
您可以按照以下方式进行修改,以达到您想要的效果。
echo "`netstat -plten | grep -i autossh | awk '{print $4}'`" >> /root/logs/autossh.txt