我有一个日志文件,一个脚本每小时检查一次这个日志文件,它会将最后一行匹配的第三个单词打包到一个变量中,但我还没有让它工作。
日志档案:
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-)")