.csvで日付と時刻の列をunixタイムスタンプに変換するBashスクリプト

.csvファイルの2つの列を日付と時刻でUNIXのタイムスタンプに変換するスクリプトを作成しようとしています。ですから、私は各行から日付と時刻の列を取得し、それを変換し、タイムスタンプを含む最後の追加の列に挿入する必要があります。

誰か助けてくれますか?これまではunixstampに時間と日付を与えるunixコマンドを発見しました:

date -d "2011/11/25 10:00:00" "+%s"
1322215200

私は誰も私を始めさせることができますbashスクリプトに関する経験はありません?

私の列と行の例:

Columns: Date, Time, 
Row 1: 25/10/2011, 10:54:36,
Row 2: 25/10/2011, 11:15:17,
Row 3: 26/10/2011, 01:04:39,

事前にありがとう!

6
csvファイルのサンプル行をいくつか含めることができますか?
追加された 著者 ajreal,
部分を解析せずにのみ変換: stackoverflow.com/questions/10990949/…
追加された 著者 Ciro Santilli 包子露宪 六四事件 法轮功,
確かに、質問、歓声にそれを追加
追加された 著者 Euan Hume,

3 答え

あなたはあなたのcsvファイルからexerptを提供していないので、私はこのファイルを使用しています:

[foo.csv]
2011/11/25;12:00:00
2010/11/25;13:00:00
2009/11/25;19:00:00

問題を解決する方法は次のとおりです。

$ cat foo.csv | while read line ; do echo $line\;$(date -d "${line//;/ }" "+%s") ; done
2011/11/25;12:00:00;1322218800
2010/11/25;13:00:00;1290686400
2009/11/25;19:00:00;1259172000

EDIT :不要な変数を削除しました)。

EDIT2 :スクリプトが実際に動作するように日付コマンドを変更しました)。

7
追加された
それをonelinerとして実行し、それがスクリプトファイルに置かれているかどうか試してみてください。また、セミコロンで区切ったcsv-fileを使用する場合は、 ';' '、に変更する必要があります。
追加された 著者 bos,
$ t変数は、使用されていないので削除することもできます。私はなぜそれをそこに残したのかわかりません。削除して投稿を編集する。
追加された 著者 bos,
"$ t" は、前のスクリプトの忘れられた残存変数です。
追加された 著者 bos,
date -d の後に "$ t" は正確に何をしますか?
追加された 著者 Youda008,
@bos whileループのループ部分を echo $ {line} \; $(date -d "$ {line //; /}" + '%s'); で短くすることができますエコーとtrが正しい日付文字列を取得する必要があります。だから、これはインプレースで行うことができます。
追加された 著者 f4m8,
ご協力ありがとうございます:私はこれをシェルスクリプトに入れました:#!/ ltd/bin/bash cat myfile.csv |一方、読取りライン。 do t = $(echo $ line | tr '、' ''); echo $ line \; $(date -d "$ t" "+%s");私はそれを実行したときに私はエラーを違法オプション - dを得たか?また、私は ';' '、'はカンマ区切りのファイルで、セミコロンは使用できません。
追加された 著者 Euan Hume,

今すぐ2つのimporvements:

First: No need for cat foo.csv, just stream that via < foo.csv into the while loop.

Second: No need for echo & tr to create the date stringformat. Just use bash internal pattern and substitute and do it inplace

while read line ; do echo ${line}\;$(date -d "${line//;/ }" +'%s'); done < foo.csv
2
追加された

これは仕事をするはずです:

 awk  'BEGIN{FS=OFS=", "}{t=$1" "$2; "date -d \""t"\"  +%s"|getline d; print $1,$2,d}' yourCSV.csv

あなたは例を挙げていませんでした。 csv について言及したので、ファイル内の列区切り文字を「カンマ」にする必要があります。

test

kent$  echo "2011/11/25, 10:00:00"|awk  'BEGIN{FS=OFS=", "}{t=$1" "$2; "date -d \""t"\"  +%s"|getline d; print $1,$2,d}'
2011/11/25, 10:00:00, 1322211600
1
追加された