我在 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命令需要做什么才能让输出逐行显示
最佳答案
只需删除 echo
和 subshell:
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
关于linux - 从 AWK 命令获取输出并根据空格逐行显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45551504/