2012-11-16 32 views
1

我有一個文件:AWK - 如何提高這個例子

2012-11-15 10:35:00 2012 11 15 10 22 00 
2012-11-14 13:03:00 2012 11 14 13 03 00 
2012-11-14 13:13:00 2012 11 14 13 13 00 
2012-11-14 13:23:00 2012 11 14 13 23 00 

此命令打印:

$ awk -F "\t" '{ system(" date -d \" "$1" \" +%s; date -d \" "$1" \" +%s ")}' file 
1352972100 
1352972100 
1352894580 
1352894580 
1352895180 
1352895180 
1352895780 
1352895780 

我想在系統()打印:

1352972100 1352972100 
1352894580 1352894580 
1352895180 1352895180 
1352895780 1352895780 

有沒有辦法做到這一點?

+0

+1對於樣本輸入,預期輸出和一些代碼。祝你好運。 – shellter

回答

1

使用GNU awk。目前尚不清楚哪些領域你真正得到的時間戳來自所以這裏印刷的一些例子使用輸入文件:

只使用1 $:

$ gawk '{s=mktime(gensub(/-/," ","g",$1" 0 0 0")); print s,s}' file 
1352959200 1352959200 
1352872800 1352872800 
1352872800 1352872800 
1352872800 1352872800 

使用$ 1和$ 2:

$ gawk '{s=mktime(gensub(/[-:]/," ","g",$1" "$2)); print s,s}' file 
1352997300 1352997300 
1352919780 1352919780 
1352920380 1352920380 
1352920980 1352920980 

使用$ 3上:

$ gawk '{sub($1" "$2" ","");s=mktime($0); print s,s}' file 
1352996520 1352996520 
1352919780 1352919780 
1352920380 1352920380 
1352920980 1352920980 

如果你沒有GAWK:

$ awk '{ ("date -d \" "$1" \" +%s") | getline s; print s,s}' file 
1352959200 1352959200 
1352872800 1352872800 
1352872800 1352872800 
1352872800 1352872800 

編輯:更新後如何使用該系統()(不推薦):

把這個shell命令行:

$ printf "%s %s\n" $(date -d 2012/11/15 +%s) $(date -d 2012/11/15 +%s) 
1352959200 1352959200 

,並在AWK系統()調用它:

$ awk '{system("printf \"%s %s\n\" $(date -d " $1 " +%s) $(date -d " $1 " +%s)")}' file 
1352959200 1352959200 
1352872800 1352872800 
1352872800 1352872800 
1352872800 1352872800 
+0

一個很好的解決方案。是否有可能使用system()做同樣的事情? – Tedee12345

+0

是的,但是你需要編寫shell代碼來完成它,而不是awk。無論如何,這不是一個好方法。我將使用UNIX日期的替代方案更新我的答案,但讓我們知道是否有任何特定的原因要使用system()。 –

+0

我有一個非常好的理由在系統()中這樣做。我想滿足我的好奇心。我知道你可以通過getline來做到這一點,但我不知道如何做system()。感謝另一個例子。 – Tedee12345

1
awk -F "\t" '{ system(" echo $(date -d \" "$1" \" +%s; date -d \" "$1" \" +%s) ")}' file 

它使用echo命令將兩個輸出壓平成一行。這不是一個好的解決方案,但它確實符合使用系統和產生答案的標準。你也可以使用這個變體:

awk -F "\t" '{ system(" x=$(date -d \" "$1" \" +%s); echo $x $x ")}' file 
+0

謝謝你的幫助。我知道這不是一個好的解決方案,但我只是出於好奇而問。 – Tedee12345