преобразовать первый столбец в CSV-файл из отметки времени в формат год-месяц - PullRequest
3 голосов
/ 25 апреля 2019

Попытка преобразовать первый столбец в CSV-файле из метки времени Unix в дату (формат год-месяц)

Попытка date -d @number'+%Y-%m' и awk, но awk не распознает @ при совместном использовании

Извлечение из файла CSV:

 1556113878,60662402644292
 1554090396,59547403093308

Ожидаемый O / p

2019-04,60662402644292
2019-03,59547403093308

Ответы [ 2 ]

3 голосов
/ 25 апреля 2019

Если у вас есть GNU awk (иногда называемый gawk), попробуйте:

gawk -F,  '{print strftime("%Y-%m", $1),$2}' OFS=, file.csv

Например, рассмотрим этот входной файл:

$ cat file.csv
1556113878,60662402644292
1554090396,59547403093308

Наша команда выдает следующие выходные данные:

$ gawk -F,  '{print strftime("%Y-%m", $1),$2}' OFS=, file.csv
2019-04,60662402644292
2019-03,59547403093308

Во многих системах Linux по умолчанию используется GNU awk.На других, таких как Ubuntu, его нет, но его легко установить: sudo apt-get install gawk.На MacOS GNU awk можно установить через homebrew.

0 голосов
/ 26 апреля 2019

Если у вас нет GNU AWK, у вас может быть системный Ruby, и в этом случае вы можете сделать это:

▶ ruby -F, -ane \
   '$F[0] = Time.at($F[0].to_i).strftime("%Y-%m"); print $F.join(",")' FILE      
2019-04,60662402644292
2019-04,59547403093308

Дальнейшее объяснение:

  • В отличие от Perl POSIX::strftime, система Ruby должна поставляться с модулем Time.Таким образом, мой выбор Ruby.

  • Параметры командной строки -F, такие же, как AWK;-n - это то же самое, что и sed;-a включает автоматическое разделение по типу AWK;-e совпадает с sed.

  • $F аналогично AWK $0, а $F[0] аналогично AWK $1.$F[0].to_i преобразует строку времени эпохи в первом поле в целое число.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...