使用AWK;系统,日期:从csv转换数据字段

时间:2014-09-24 20:38:01

标签: date csv awk system

您好我有一些类似的csv文件:

"N.º","Fecha Tiempo, GMT-03:00","Temp, °C (LGR S/N: 10466185, SEN S/N: 10466185, LBL: Temperatura)","Acoplador separado (LGR S/N: 10466185)","Acoplador adjunto (LGR S/N: 10466185)","Host conectado (LGR S/N: 10466185)","Parado (LGR S/N: 10466185)","Final de archivo (LGR S/N: 10466185)"
1,03/03/14 01:00:00 PM,25.477,Registrado,,,,
2,03/03/14 02:00:00 PM,24.508,,,,,
3,03/03/14 03:00:00 PM,26.891,,,,,
4,03/03/14 04:00:00 PM,25.525,,,,,
5,03/03/14 05:00:00 PM,27.358,,,,,

然后我想在两个字段中转换第二个数据小时字段:日期,小时

我可以分开日期和小时,但是当我尝试将上午的时间转换为24小时的小时数时,我失败了。

对所有文件使用此命令:

awk -F"," '{print $2}' *.csv|awk '{print $1","$2" "$3}'

我到达那个命令,特别是:

echo "11:04:44 PM" | awk -F,  -v hora=$1 '{system("date --date=$hora +%T");print $hora}'
00:00:00
11:04:44 PM

问题是系统内部的变量(日期......因为它返回0或为空。

然后问题是如何做到这一点。 最后,如何在文件中插入tath更改。

谢谢,非常感谢!

2 个答案:

答案 0 :(得分:1)

在我的机器(Mac OS)上,您需要的命令是

echo "11:22:33 AM" | awk '{split($1,a,":"); if($2=="PM") {a[1]=a[1]+12;} print a[1] ":" a[2] ":" a[3]}'

这可以手动分割时间(而不是依赖于date,这是一个平台依赖)并且如果它是PM则增加12。

所以整个事情变成了:

awk -F"," '{print $2}' *.csv | awk '{split($1,a,":"); if($2=="PM") {a[1]=a[1]+12;} print a[1] ":" a[2] ":" a[3]}'

虽然你真的想跳过文件中的第一行,所以

awk -F"," 'if(NR>1){print $2}' *.csv | awk '{split($1,a,":"); if($2=="PM") {a[1]=a[1]+12;} print a[1] ":" a[2] ":" a[3]}'

答案 1 :(得分:0)

谢谢! 现在,经过几个小时我可以使用' date'来转换时间,然后代码为:

echo "11:04:44 PM" | awk -F, -v hora=$1 '{system("date --date=\""$hora"\" +%T");print $hora}'

使用thaat,您可以比较24小时和上午/下午的时间

细节是' \"'在' $ hora'之前和之后变量

然后,要从你必须放置的csv文件中转换完整的DAte-Hour:

awk -F"," '{if (FNR>=3) print $2}' *.csv | awk '{print $1","$2" "$3}'| awk -F, '{system("printf "$1", &  date --date=\""$2"\" +%T")}'

现在,我必须设计一个新的文件,包括id和values列......