Скрипт Bash для преобразования столбца даты и времени в метку времени Unix в .csv - PullRequest
7 голосов
/ 25 ноября 2011

Я пытаюсь создать скрипт для преобразования двух столбцов в файле .csv, которые представляют собой дату и время, в метки времени Unix. Поэтому мне нужно получить столбец даты и времени из каждой строки, преобразовать его и вставить в дополнительный столбец в конце, содержащий метку времени.

Может ли кто-нибудь мне помочь? До сих пор я обнаружил команду unix для преобразования любого заданного времени и даты в unixstamp:

date -d "2011/11/25 10:00:00" "+%s"
1322215200

У меня нет опыта работы с bash-скриптингом. Может кто-нибудь начать меня?

Примеры моих столбцов и строк:

Columns: Date, Time, 
Row 1: 25/10/2011, 10:54:36,
Row 2: 25/10/2011, 11:15:17,
Row 3: 26/10/2011, 01:04:39,

Большое спасибо заранее!

Ответы [ 3 ]

7 голосов
/ 25 ноября 2011

Вы не предоставляете отрывок из своего csv-файла, поэтому я использую его:

[foo.csv]
2011/11/25;12:00:00
2010/11/25;13:00:00
2009/11/25;19:00:00

Вот один из способов решения вашей проблемы:

$ cat foo.csv | while read line ; do echo $line\;$(date -d "${line//;/ }" "+%s") ; done
2011/11/25;12:00:00;1322218800
2010/11/25;13:00:00;1290686400
2009/11/25;19:00:00;1259172000

( EDIT : удалена ненужная переменная.)

( EDIT2 : изменена команда даты, чтобы скрипт действительно работал.)

2 голосов
/ 25 ноября 2011

Теперь два улучшения:

Во-первых: нет необходимости в cat foo.csv, просто передайте его через

Второе: нет необходимости в echo & tr для создания формата строки даты. Просто используйте внутренний шаблон bash и подставьте его на место

while read line ; do echo ${line}\;$(date -d "${line//;/ }" +'%s'); done < foo.csv
2 голосов
/ 25 ноября 2011

это должно сделать работу:

 awk  'BEGIN{FS=OFS=", "}{t=$1" "$2; "date -d \""t"\"  +%s"|getline d; print $1,$2,d}' yourCSV.csv

примечание

ты не привел ни одного примера. и вы упомянули csv , поэтому я предполагаю, что разделитель столбцов в вашем файле должен быть "запятой".

тест

kent$  echo "2011/11/25, 10:00:00"|awk  'BEGIN{FS=OFS=", "}{t=$1" "$2; "date -d \""t"\"  +%s"|getline d; print $1,$2,d}'
2011/11/25, 10:00:00, 1322211600
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...