我是批处理/ shell脚本的新手。我有一个像这样的CSV文件:
Id depId Name city Date prod
12345 52845 ken LA 08.08.2013 16:06:53 KLS22
25685 28725 Larry MA 09.03.2013 16:06:58 KLt35
58345 28545 ken LA 06.08.2013 16:06:53 KLS22
75885 98725 Gow CA 05.04.2013 16:06:58 KLt35
约2000条记录。 col由制表符分隔。我想将日期列更改为以下格式:
DD_MM_YYY_hh_mm_ss
我用awk尝试了类似的东西:
awk -F '' '{ ("date -d \""$5"\" \"+%Y:%m/%d %T\"") | getline $5; print }' myfile.csv
但我得错了输出。
我希望输出如下:
Id depId Name city Date prod
58345 28545 ken LA 03_06_2013_23_00_00 KLS22
75885 98725 Gow CA 05_06_2013_23_00_00 KLt35
请帮忙!谢谢!
答案 0 :(得分:1)
awk
的一种方式:
$ awk 'NR>1{gsub(/\./,"_",$5);gsub(/:/,"_",$6);$5=$5"_"$6;$6=$NF;NF--}{$1=$1}1' OFS="\t" myfile.csv
$ cat temp
Id depId Name city Date prod
12345 52845 ken LA 8.8.2013 16:06:53 KLS22
25685 28725 Larry MA 9.3.2013 16:06:58 KLt35
58345 28545 ken LA 6.8.2013 16:06:53 KLS22
75885 98725 Gow CA 5.4.2013 16:06:58 KLt35
$ awk 'NR>1{gsub(/\./,"_",$5);gsub(/:/,"_",$6);$5=$5"_"$6;$6=$NF;NF--}{$1=$1}1' OFS="\t" temp
Id depId Name city Date prod
12345 52845 ken LA 8_8_2013_16_06_53 KLS22
25685 28725 Larry MA 9_3_2013_16_06_58 KLt35
58345 28545 ken LA 6_8_2013_16_06_53 KLS22
75885 98725 Gow CA 5_4_2013_16_06_58 KLt35
答案 1 :(得分:0)
一种更简单的方法,它不检查看起来像日期的字符串是否真的在正确的列中:
$ perl -pe 's/\t(\d)\.(\d)\.(\d\d\d\d) /sprintf("\t%04d-%02d-%02d ", $3, $2, $1) /e' t.csv
12345 52845 ken LA 2013-08-08 16:06:53 KLS22
25685 28725 Larry MA 2013-03-09 16:06:58 KLt35