linux - 从 AWK 命令获取输出并根据空格逐行显示

标签 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命令需要做什么才能让输出逐行显示

最佳答案

只需删除 echo 和 subshel​​l:

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/

相关文章:

linux - Linux 中的串口路由

sed - 在特定点分隔文件中的每一行

linux - 对两个文件使用 diff 并通过电子邮件发送

regex - 使用 sed 仅替换字符的单个实例

bash - 如何将subshel​​l结果(数组)传递给SSH命令?

linux - 如何解决 Docker 问题无法连接到总线 : No such file or directory

linux - shell编程(shell命令使用)

linux - 如何使用 AWK 或 Sed 在 x 个单词后插入换行符\n

c++ - 向 C++ 控制台应用程序添加状态栏

linux - gnu make - 确定 stdout 是否是终端