从AWK命令获取输出并根据空白区域逐行显示

时间:2017-08-07 16:19:52

标签: linux bash awk

我在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命令逐行显示输出

2 个答案:

答案 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