2016-04-20 3 views
0
awk -F, '{"date -d \"$1\" +%s"|getline b;{print $1 "," b} }' test.csv 

Выше моего awk command, я хотел использовать ввод из файла и преобразовать его в миллисекунды. но когда я его использовал, он показывает мне текущее преобразование даты в миллисекундах, а не преобразование для конкретного ввода из файла.хотите использовать команду linux в команде awk

это мои данные файла; - test.csv

31-JAN-2012 
06-JUL-2009 
03-OCT-2011 
03-OCT-2011 
03-OCT-2011 
03-OCT-2011 
03-OCT-2011 
+2

См поглазеть ручной раздел «9.1 .5 Временные функции ". –

+0

Каков ваш ожидаемый результат? – fedorqui

+0

Предполагая, что вы имеете в виду эпоху (1 января 1970 г.) - 'cat test.csv | xargs -n1 -I {} date -d "{}" +% s000' –

ответ

1

Во-первых, date команда не поддерживает миллисекунды, +%s являются секунд. Если вы уверены, что потребительские программы могут справиться с точностью в миллисекунду, вы можете просто добавить 000 в результат date +%, чтобы подделать эту точность.

Надлежащий awk Команда:

awk -F, '{"date -d"$1" +%s"|getline b; print $1 "," b}' test.csv 

С точностью до миллисекунды

awk -F, '{"date -d"$1" +%s"|getline b; print $1"000" "," b}' test.csv 
+1

'awk 'НАЧАТЬ {FS = OFS =", "}', поэтому вам не нужно указывать запятую в 'print'. – fedorqui

+1

Используйте «date +% s000» за миллисекунды. –

+0

@fedorqui Думал об этом, но он длиннее :) – hek2mgl

2

Используя нестандартную mktime функцию от GNU awk:

BEGIN { 
    FS="-" 
    split("JAN-FEB-MAR-APR-MAY-JUN-JUL-AUG-SEP-OCT-NOV-DEC", month) 
    for (i in month) { 
     month[month[i]]=i 
    } 
} 
{ 
    print mktime($3" " month[$2] " "$1" 00 00 00") "000," $0 
} 
+0

@JonathanLeffler True, а 'date +% s' также является расширением GNU. –