テキストファイルがあります。時間/日付スタンプにカンマを追加したいです。
$ 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番目のパラメータは1
mktimeを使用するため、タイムスタンプはUTC時間です。タイムスタンプが現地時間の場合は0に変更します。