2011-11-10 13 views
1

私は18個の小さなファイルに分割された大きなtxtファイルスペースを持っています。この分割は、タイムスタンプが深夜に達するたびに区切り文字に基づいて行われます。だから、効果的に、私は(ダッシュやパイプを無視し、注意してください、私は読みやすさを改善するためにそれらを使用しました)の形で18個のファイルになってしまいます:Bashとawk:フィールドを12時間から24時間クロックに変換する

file1の

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 
.. 

は、私はそのように短いに2段階の「スプリット段階」と「処理ステージを」ありますAWKを使用してファイルのそれぞれにいくつかの処理を実行します。

大規模なtxtファイルに含まれるタイムスタンプは、2つの形式のうちの1つです。希望の24時間形式の「00:00:01」または望ましくない12時間形式の「12:00:01 AM」。

その結果、私はすべてのフォーマットを24時間に変換しようとしており、どうやってこれを行うのか分かりません。私はまた、bashを使ってスプリットステージでこれをしようとするのか、AWKを使ってプロセスステージで行うのかについてもわかりません。私は、しかし、私は私のシェルスクリプトにこれを組み込むするかどうかはわかりません、私は「スプリット段階」で「読み取りラインながら」を使用していた以下の機能が

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

時間24に12時間を変換していることを知っていますまたは「処理段階」で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

こんにちは、応答に感謝、私は、入力ファイルを供給し、そのすべてが24時間に12時間のタイムスタンプをファイルに変換するためにあなたのコードを使用しようとしているが、それはです変換を行わない: 'cat" myFile.txt "|一方、読取りライン。 doline $ 1; print} '> testエコー "$ line" | awk -F' '' BEGIN {OFS = ""} {( "date - 日付= \" "$ 1" \ "+%T" .txt done' 私のファイルはスペースで区切られていますが、上記のコードでは時刻は24時間に変換されません。助けてくれてありがとう。 – cbros2008

+0

申し訳ありませんが、ちょうど$ 1ではなく、日付セクション(時間と午前/午後)に$ 1 $ 2を持っていたはずです。それは今働きます、ありがとう! – cbros2008

関連する問題