Awk 仅在变量和字符串之前打印字符串

Awk printing only strings before variables and strings

我正在尝试使用 awk 打印将来自最后一个命令的数据转换为纪元时间。该代码始终在 10.14.5 上运行,有时在 10.13.6 上运行。当我今天早上上班时它运行良好,然后大约 11 点开始给我错误。

基本上,awk 打印文字字符串,然后是换行符,然后是文字字符串和变量。例如, 如果 $1="Hello",则:

awk '{print ,"World"}'

实际上是在打印“世界 你好世界

给出错误的实际代码行是这样的:

x=$(last -1 $a | awk '{print  " " " "   " "  ":00 EDT "}')

应该将 x 设置为 "Fri May 31 12:43:00 EDT " 例如,它将 x 设置为 " :00 EDT 5 月 31 日星期五 12:43:00 美国东部时间“

编辑:我应该说代码行中的 $a 将设置为计算机上的用户名

在我的 High Sierra 系统上,last -1 barmar 没有打印任何有用的信息。我的 Mac 已经运行了 9 天(自从我安装了最新的安全更新后)。 运行 需要 8 秒,并且只打印:


wtmp begins Fri May 31 12:53 

所以有一个空行,然后是 wtmp 开始的行,这似乎总是当前时间。

因此 awk 脚本运行正常。第一行没有任何字段,因此所有 $n 值都将为空,您只得到 :00 EDT。第二行包含 wtmp begins 行,并在输出中创建 Fri May 31 12:48:00 EDT(即使您使用了 -1,它仍然会产生两行输出)。当你组合它们时,你会得到

$ echo "$x"
   :00 EDT 
Fri May 31 12:48:00 EDT 

Terminal 'last' command doesn't display login history 声称 sudo last 应该有效,但它不适合我。

How do you stop wtmp from erasing? 建议从 /var/log/monthly.out.

获取你想要的信息