我有文本文件。想要在时间/日期戳中添加逗号
$ 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
请注意,由于第二个参数1
采用 mktime,因此时间戳采用 UTC 时间。如果时间戳是本地时间,则将其更改为 0。