将文件从一种日期格式转换为另一种日期格式

时间:2013-07-27 22:38:49

标签: perl shell sed awk

我有一堆文件包含以下csv格式的一堆引号:

"Date","Time","Open","High","Low","Close","Volume"
12/30/2002,0930,24.53,24.65,24.53,24.65,762200
12/30/2002,0931,24.65,24.68,24.52,24.6,90400

我需要将文件转换为具有几乎相同名称的新文件(例如file.txt到file-NTF.txt),如下所示:

"Date Time","Open","High","Low","Close","Volume"
20021230 093000;24.53;24.65;24.53;24.65;762200
20021230 093100;24.65;24.68;24.52;24.6;90400

所以日期和时间列合并为一个,日期格式不同也不同。逗号也变成了分号。我在awk中得到了这么多

awk -F "," '{print $1,$2}' file.txt

会打印原始文件的日期和时间,但现在我被卡住了。

3 个答案:

答案 0 :(得分:2)

使用GNU awk

awk 'NR>1{print $3$1$2" "$4"00",$5,$6,$7,$8,$9;next}{sub(/","/," ")}1' FS='[/,]' OFS=';' file
"Date Time","Open","High","Low","Close","Volume"
20021230 093000;24.53;24.65;24.53;24.65;762200
20021230 093100;24.65;24.68;24.52;24.6;90400

答案 1 :(得分:0)

尝试

awk -F, 'BEGIN{
  print "\"Date Time\";\"Open\";\"High\";\"Low\";\"Close\";\"Volume\""
}
NR>1 {
  printf("%04d%02d%02d %04d00;%s;%s;%s;%s\n", \
    substr($1,7,4), substr($1,1,2), substr($1,4,2),  $2, \
    $3, $4, $5, $6 $7)
}' file

<强>输出

"Date Time";"Open";"High";"Low";"Close";"Volume"
20021230 093000;24.53;24.65;24.53;24.65762200
20021230 093100;24.65;24.68;24.52;24.690400

我冒昧地使用您在示例输出记录中显示的字段分隔符,并在Header中使用它。作为分界符的逗号很麻烦,IHMO。

IHTH

答案 2 :(得分:0)

这可能适合你(GNU sed):

sed -r '1{s/","/ /;b};s/^(..).(..).(....).(....)/\3\1\2 \400/;y/,/;/' file

对于第一行,只用空格替换第一个双引号,逗号双引号。

对于第二行和后续行,应用替换和翻译。

但是,要用分号替换所有逗号,请使用:

sed -r '1s/","/ /;1!s/^(..).(..).(....).(....)/\3\1\2 \400/;y/,/;/' file
相关问题