2011-11-10 101 views
1

我有一個很大的txt文件空間,我將其分成18個較小的文件(每個文件都有自己的列數)。此分割基於分隔符,即每當時間戳命中午夜時。所以有效,我會在形式的18個文件結束(注意,忽略破折號和管道,我用它們來提高可讀性):Bash和awk:將字段從12小時轉換爲24小時時間

文件1

time ----------- valueA - valueB 
12:00:00 AM |  54.13 | 239.12 
12:00:01 AM |  51.83 | 119.93 
.. 

file18

time ---------- valueA - valueB - valueC - valueD 
12:00:00 AM |  54.92 | 239.12 | 231.23 | 882.12 
12:00:01 AM |  23.92 | 121.92 | 201.23 | 892.12 
.. 

一旦我分裂文件I隨後對每個使用AWK的文件的執行一些處理,以便在短的有2個階段的「分裂階段」和「處理級」。

不幸的是,包含在大文本文件中的時間戳是2種格式中的1種。可能是24小時格式的「00:00:01」或12小時格式「12:00:01 AM」。

因此,我試圖將所有格式轉換爲24小時,我不知道如何做到這一點。我也不確定是否在分裂階段使用bash或在使用AWK的流程階段進行嘗試。我知道下面的函數轉換12小時至24小時

'date --date="12:00:01 AM" +%T' 
然而

,我不知道如何在「分裂階段」將這一進我的shell腳本是我使用「而讀行」或者在'處理階段'是否應該在AWK中進行時間轉換(如果可能?)。

回答

3

看到下面的測試,對你有幫助嗎?

kent$ echo "12:00:00 AM |  54.92 | 239.12 | 231.23 | 882.12 "\ 
|awk -F'|' 'BEGIN{OFS="|"}{("date --date=\""$1"\" +%T") |getline $1;print }' 

輸出

00:00:00|  54.92 | 239.12 | 231.23 | 882.12 
+0

您好,感謝您的答覆,我試圖用你的代碼來養活一個輸入文件,並轉換所有的文件12小時時間戳爲24小時,但它沒有做轉換: 'cat「myFile.txt」|而讀線; do echo「$ line」| awk -F'''BEGIN {OFS =「」} {(「date --date = \」「$ 1」\「+%T」)| getline $ 1; print}'> test .txt done' 我的文件是空格分隔的,但上面的代碼不會將時間轉換爲24小時?再次感謝您的幫助。 – cbros2008

+0

對不起,我意識到我應該在日期部分(時間和上午/下午)有1美元2美元而不是1美元。它現在有用,謝謝! – cbros2008

相關問題