WedX - журнал о программировании и компьютерных науках

Как использовать функцию strftime несколько раз в команде awk

Я хочу использовать gawk для преобразования временных меток unix в формат даты, используя strftime.

Когда я использую strftime один раз, я получаю ожидаемый результат:

$ echo 1454310000 | gawk -F "," '{$s=strftime("%Y-%m-%d %H:%M:%S", ($1), 1); $e=$s; print ($s, $e);}'
2016-02-01 07:00:00 2016-02-01 07:00:00

Но когда я использую strftime несколько раз, оба возвращаемых результата совершенно неверны:

$ echo 1454310000 | gawk -F "," '{$s=strftime("%Y-%m-%d %H:%M:%S", ($1), 1); $e=strftime("%Y-%m-%d %H:%M:%S", ($1), 1); print ($s, $e);}'
1970-01-01 00:33:36 1970-01-01 00:33:36

Почему это происходит и как мне это исправить, чтобы я мог дважды использовать strftime для одного и того же ввода?

25.08.2016

  • Как вы думаете, что означают $e и $s? Я думаю, вы используете стиль шелл-кода в коде awk. Пожалуйста, прочтите awk основные руководства и узнайте о awk, потому что print $n печатает не содержимое переменной n, а n-е поле из строки ввода. 25.08.2016
  • Когда я запускаю ваш код awk, я получаю fatal: 3 is invalid as number of arguments for strftime. 25.08.2016

Ответы:


1

Проблема здесь заключается в использовании переменных. В awk переменные не обозначаются первым долларом. Поэтому скажите «да» var и скажите «нет» $var:

$ echo 1454310000 | gawk -F "," '{s=strftime("%Y-%m-%d %H:%M:%S", ($1), 1); e=strftime("%Y-%m-%d %H:%M:%S", ($1), 1); print (s, e);}'
2016-02-01 07:00:00 2016-02-01 07:00:00

Что происходило?

Поскольку s и e были неопределенными переменными, когда вы сказали $s=something(), вы в конечном итоге присвоили вывод этого something() в $ плюс неопределенное значение переменной, которое по умолчанию равно 0. А $0 — это вся запись, поэтому вы присваивали значение самой записи.

См. более простой пример:

$ echo "hello" | awk '{$s="bu"; print}'
bu
25.08.2016

2

Вам не нужны символы '$' для разыменования переменных. Попробуй это:

echo 1454310000 | gawk -F "," '{s=strftime("%Y-%m-%d %H:%M:%S", ($1), 1); e=strftime("%Y-%m-%d %H:%M:%S", ($1), 1); print (s, e);}'
25.08.2016
Новые материалы

Объяснение документов 02: BERT
BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

Как проанализировать работу вашего классификатора?
Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

Работа с цепями Маркова, часть 4 (Машинное обучение)
Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

Учебные заметки: создание моего первого пакета Node.js
Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..


Для любых предложений по сайту: [email protected]