テキストファイルがあります。 txtファイルの時間/日付スタンプにカンマを追加するか、次のテキストを3列のcsvに変換したいと思います。

テキストファイルがあります。 txtファイルの時間/日付スタンプにカンマを追加するか、次のテキストを3列のcsvに変換したいと思います。

テキストファイルがあります。時間/日付スタンプにカンマを追加したいです。

$ cat sample.txt
 name1 [jdk]                 Mon Nov 01 12:14:04 EST 2004     Mon Jan 01 00:37:19 EST 2035

以下のような出力が必要で、csvファイルに変換する必要があります。

name1 [jdk],Mon Nov 01 12:14:04 EST 2004,Mon Jan 01 00:37:19 EST 2035

答え1

GNU sedを使用すると、スペースが何であるか、最初の日付の前にどのテキストが表示されるかは重要ではありません。

$ sed -E 's/(.*\S)\s+((\S+\s+){5}\S+)\s+((\S+\s+){5}\S+)$/\1,\2,\4/' sample.txt
name1 [jdk],Mon Nov 01 12:14:04 EST 2004,Mon Jan 01 00:37:19 EST 2035

答え2

次の作業を行う必要はありませんawk

cut --output-delimiter="," -c1-28,29-56,62- sample.txt | sed -e "s/ *,/,/"

cut固定幅ファイルを読み取り、区切りファイルに変換します。

sedフィールドの末尾にある追加のスペースは削除されます。

答え3

awk '{gsub(/[[:space:]]{3,}/,",",$0);print }' file1

出力

name1 [jdk],Mon Nov 01 12:14:04 EST 2004,Mon Jan 01 00:37:19 EST 2035

答え4

おそらくawkを使用する必要があります。奇数の日付文字列をより便利なものに変更できるからです。つまり、エポック以降の秒単位のタイムスタンプです。

$ awk -F '[ \t:]' 'BEGIN{ m="JanFebMarAprMayJunJulAugSepOctNovDec" }
               { sub("^"FS,"")
                 mon1 = (match(m,$4)+2)/3;
                 sec1 = mktime($10" "mon1" "$5" "$6" "$7" "$8 );
                 mon2 = (match(m,$12)+2)/3;
                 sec2 = mktime($18" "mon2" "$13" "$14" "$15" "$16);
                 print( $1,$2,",",sec1,",",sec2 )
               }
    ' sample.txt

name1 [jdk] , 1099311244 , 2051224639

2番目のパラメータは1mktimeを使用するため、タイムスタンプはUTC時間です。タイムスタンプが現地時間の場合は0に変更します。

関連情報