Awk печатает только строки перед переменными и строками - PullRequest
1 голос
/ 31 мая 2019

Я пытаюсь преобразовать данные из последней команды во время эпохи с помощью awk print. код работает на 10.14.5 все время и иногда на 10.13.6. Когда я пришел на работу сегодня утром, все работало нормально, а около 11 часов начал давать мне ошибки.

По сути, awk печатает буквенные строки, затем символ новой строки, затем буквенные строки и переменные, как и должно быть. например, если $ 1 = "Привет", то:

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

на самом деле печатает "Мир" Привет, мир "

Фактическая строка кода, сообщающая об ошибке, такова:

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

, где он должен установить x в «Пт 31 мая 12:43:00 ПО ВОСТОЧНОМУ ВРЕМЕНИ», например, он устанавливает x в «: 00 EDT» Пт 31 мая 12:43:00 ПО ВОСТОЧНОМУ ВРЕМЕНИ "

РЕДАКТИРОВАТЬ: я должен сказать, что $ a в строке кода будет установлен на имя пользователя на компьютере

1 Ответ

0 голосов
/ 31 мая 2019

В моей системе 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 

Команда терминала 'последняя' не отображает историю входа утверждает, что sudo last должна работать, но это не для меня.

Как вы можете остановить стирание wtmp? предлагает получить нужную информацию из /var/log/monthly.out.

...