我可以在 1 中运行两个不同的 awk 命令吗?

我可以在 1 中运行两个不同的 awk 命令吗?

我可以使用此 awk 命令来获取日志文件的最后一行:

awk 'END{print}' /home/jj1/.pia_manager/log/pia_nw.log

我可以使用这个 awk 命令来提取子字符串:

awk -F"[()]" '{print $2}' /home/jj1/.pia_manager/log/pia_nw.log

我想做的是将两者合并为一个 awk 命令。我尝试了很多组合,但都无法正常工作。我的目标是将提取的字符串发送到 Conky 显示器。这可以做到吗,还是我需要使用 2 个命令?

日志文件的最后一行总是包含我需要的字符串:

[2018-11-15T03:34:07.160Z] <debug> |tray| Translated status is "You are connected (Canada Vancouver)"

括号里的部分就是我想要的。结果输出:

Canada Vancouver

答案1

如果您想要最后一行的第二个字段使用该字段分隔符:

awk -F"[()]" 'END {print $2}' /home/jj1/.pia_manager/log/pia_nw.log

答案2

将第一个 awk 的输出通过管道传输到第二个 awk:

awk 'END{print}' /home/jj1/.pia_manager/log/pia_nw.log | awk -F"[()]" '{print $2}'

这种变体更安全(忽略文件中的最后空行):

awk '/^$/ {nlstack=nlstack "\n";next;} END{printf "%s",nlstack; nlstack=""; print;}' /home/jj1/.pia_manager/log/pia_nw.log | awk -F"[()]" '{print $2}'

相关内容