2013-05-07 2 views
1

Я попытался найти ответ здесь и в других источниках, но я в недоумении. Я создаю маленький крошечный awk-инструмент для использования с консольным твиттер-клиентом twidge (https://github.com/jgoerzen/twidge/wiki)AWK Преобразование «длинной даты» в datetime

Из выходных входящих твитов я хочу делать разные интересные материалы, но для того, чтобы данные были полезными Мне нужно чтобы получить метку времени в формате, который я могу обработать.

Для справки, вот выход настоящее время я получаю с помощью команды

Код

twidge lsrecent -l | gawk -F"\t" '{print "@"$2 ": " $4 " ("$5")"}' 

Выход

@nytimes: China Cuts Ties With North Korean Bank http://t.co/N3iljjgGbH (Tue May 07 12:57:04 +0000 2013) 

Тогда я пытался быть умным и сделал это

Код

twidge lsrecent -l | gawk -F"\t" '{print "@"$2 ": " $4 " ("strftime("%Y-%m-%d %T",$5)")"}' 

Но получил эту несчастную выход

@BloombergNews: HSBC posts bigger-than-estimated increase in first-quarter profit | http://t.co/QraWonRU32 (1970-01-01 01:00:00) 

Как мы можем видеть, преобразование даты не было, как хотелось бы. Любые указатели наиболее приветствуются. Это не должно быть awk/gawk, это просто предпочтение. В конечном итоге данные будут помещены в базу данных и будут работать там.

Спасибо!

Martin

ответ

1

Вы можете использовать внешнюю команду дату (я просто сделать пример для DateString).

kent$ echo "Tue May 07 12:57:04 +0000 2013"|awk '{"date -d\""$0"\" +\"%F %T\""|getline d; print d}' 
2013-05-07 14:57:04 

или получить дату в секундах с 1970-01-01 по Гринвичу, а затем использовать STRFTIME AWK в:

awk '{"date -d\""$0"\" +\"%s\""|getline d; print strftime("%Y-%m-%d %T",d)}' 

EDIT

twidge lsrecent -l | gawk -F"\t" '{"date -d\""$5"\" +\"%s\""|getline d;print "@"$2 ": " $4 " ("strftime("%Y-%m-%d %T",d)")"}' 
+0

Спасибо за вход, я пытался, но это то, что произошло '@ReutersBiz: акции OfficeMax выросли, поскольку специальные дивиденды перевешивают пропущенную прибыль http://t.co/LlR6yK4N8l (date -d" Вт май 07 13:30:32 +0000 2013 "+"% F% T ")' от команды ': ~/scripts $ twidge lsrecent -l | gawk -F "\ t" '{print "@" $ 2 ":" $ 4 "(" "date -d \" "$ 5" \ "+ \"% F% T \ "" ")"}' ' – Martin

+0

I в моем коде есть 'getline'. вы просто конкатенируете строку с 'date -d .....', не выполнили ее. – Kent

+0

ОК, поэтому мой вопрос заключается в том, как выполнить 'date'within awk-script – Martin

Смежные вопросы