【问题标题】:Convert a file from using one date format to another将文件从使用一种日期格式转换为另一种
【发布时间】:2013-07-27 22:38:49
【问题描述】:

我有一堆文件,其中包含以下 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

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

【问题讨论】:

    标签: perl shell sed awk


    【解决方案1】:

    使用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
    

    【讨论】:

    • 甜!!谢谢你们俩。
    【解决方案2】:

    试试

    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
    

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

    IHTH

    【讨论】:

      【解决方案3】:

      这可能对你有用(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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-11-23
        • 1970-01-01
        • 1970-01-01
        • 2015-04-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多