【问题标题】:Awk printing only strings before variables and stringsawk 在变量和字符串之前只打印字符串
【发布时间】:2019-10-17 07:56:06
【问题描述】:

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

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

awk '{print $1,"World"}'

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

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

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

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

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

【问题讨论】:

  • 听起来你有 DOS 行尾。见stackoverflow.com/questions/45772525/…
  • 您确定last 正在打印您期望的内容吗?
  • 在我的 High Sierra 系统上,last 除了 wtmp begins Fri May 31 12:48 之外什么都不显示

标签: bash macos awk printing macos-sierra


【解决方案1】:

在我的 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 获取您想要的信息。

【讨论】:

  • 谢谢。我的 10.13 机器也在做同样的事情。你知道为什么 last 有时会起作用而其他时候不起作用吗?当我今天早上测试时,最后一个命令运行良好,然后在上午 11 点左右它停止工作,此后一直没有工作。当我昨天在 68 台机器上测试时,最后一条命令在其中大约 40% 上运行,其中许多运行的是 10.13
  • 我认为有一个定期的作业会清空 wtmp 文件。所以你的第一次尝试是在文件被清理之前。
猜你喜欢
  • 2016-01-02
  • 2021-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-15
  • 1970-01-01
  • 2012-12-12
  • 2013-10-10
相关资源
最近更新 更多