搜索文件中最后一行匹配的行,然后将该行的第三个单词放入变量中

搜索文件中最后一行匹配的行,然后将该行的第三个单词放入变量中

我有一个日志文件,一个脚本每小时检查一次这个日志文件,它会将最后一行匹配的第三个单词打包到一个变量中,但我还没有让它工作。

日志档案:

2018-11-18 22:27:10 1542576430 c2- restarted=true
2018-11-19 00:14:34 1542582874 c2- restarted=true

用 c2- 搜索最后一行并将此行打包到 int 变量“lastline”中

lastline=$(tac $logfile | grep -m1 c2-)

现在将此行的 3 个字符串放入一个变量中:

last=$(awk '{print $3}' $lastline)

但那不起作用..

特别是当我尝试时它不起作用:

lastline=$(tac $(awk '{print $3}' $lastline) | grep -m1 c2-)

那么有人可以帮助我吗?目前我完全不知道...输出始终是:

awk: cannot open 2018-11-19 (No such file or directory)

答案1

这和你想象的不一样:

awk '{print $3}' $lastline

第二个参数应该是文件名,而不是要处理的字符串。在 bash 中,可以使用 here-string 将字符串发送到注释的标准输入:

awk '{print $3}' <<< "$lastline"

因此,如果没有中间变量:

last=$(awk '{print $3}' <<< "$(tac "$logfile" | grep -m1 c2-)")

相关内容