4

日付をタイムスタンプにフォーマットするには、たとえばdate -d "2012-05-06 12:12" "+%s". しかし、行ごとに日付を含むファイルがある場合、どうすれば次のようなことができますか:

cat file.txt | date "+%s" # does not work

私は次のことができます:

cat file.txt | while read line; do `date -d "$line" "+%s"`; done;

しかし、これは非常に醜いです...

日時をタイムスタンプ (YYYY-MM-DD HH:MM:SS の形式) に変換する他のソリューションも同様に受け入れられます。

編集:私の実際の例はもう少し複雑です。詳しく説明しましょう:

`some command that produces complex lines` | grep only-speicif-lines | awk '{ print $5 | (I WANT TO PASS THE DATE HERE TO GET TIMESTAMP IN THE END)}'
4

1 に答える 1

9

これにより、次のようになります。

while read mydate
do
  date -d "$mydate" "+%s"
done < file

あなたの解決策に注意してください

cat file.txt | while read line; do `date -d "$line" "+%s"`; done;

行ごとにファイル行を読み取る方法ではありません。必要がある

while read line; do `date -d "$line" "+%s"`; done < file.txt
                                                  ^^^^^^^^^^

テスト

$ cat a
2012-05-06 12:12
2012-05-06 12:13
$ while read mydate; do date -d "$mydate" "+%s"; done < a
1336299120
1336299180

アップデート

あなたのコメントから:

編集:私の実際の例はもう少し複雑です。詳しく説明しましょう:

`some command that produces complex lines` | grep only-speicif-lines | awk '{ print $5 | (I WANT TO PASS THE DATE HERE

最後にタイムスタンプを取得するには)}'

これはそれを作ることができます:

xargs -i date -d "{}" "+%s" 

テスト

$ cat a | grep 2 | xargs -i date -d "{}" "+%s"  # grep here is just a silly example
1336299120
1336299180
于 2013-08-16T11:52:13.333 に答える