【问题标题】:Changing text in CSV file using Perl使用 Perl 更改 CSV 文件中的文本
【发布时间】:2013-10-20 09:45:26
【问题描述】:

我对 Perl 一无所知。我查看了一些在线教程,对以下内容一无所知。

我在 PostgreSQL 中进行查询,并保存到 CSV 文件。但是,在创建 CSV 文件后需要更改一个元素,我不知道该怎么做。

已有的查询结果是这样的

phone        date      time     staff email and customer ID -- my explanation 

1112223333,10/21/2013,3:00 AM,sklund@myemail.comSMIB010170 -- data in csv

查询完成后,必须将时间字段中的数据转换为:

1112223333,10/21/2013,03:00am,sklund@myemail.comSMIB010170

如您所见,如果小时数小于十,则需要修改时间以包含0,并且必须将AM 更改为am

是否有一个简单的 Perl 脚本可以做到这一点?当然,数据行会有所不同,因为每一行都会反映当天的查询结果。

如果有人能指出我的教程、链接或帮助,我将不胜感激。

【问题讨论】:

    标签: perl


    【解决方案1】:

    这将满足您的需求。

    我假设您也想删除AM 之前的空格?你没有在你的问题中提到它。

    perl -pe 's/,(\d{1,2}):(\d\d)\s+([AP]M),/sprintf ",%02d:%02d%s,",$1,$2,lc $3/ei' mylogfile > newlogfile
    

    【讨论】:

    • 鲍罗丁-感谢您的帮助!我将您的代码尝试为: perl -pe 's/,(\d{1,2}):(\d\d)\s+([AP]M),/sprintf ",%02d:%02d%s, ",$1,$2,lc $3/ei' phase1sys1.csv > phase1sys1.csv 并将文件擦除为零字节文件。然后我尝试了: perl -pe 's/,(\d{1,2}):(\d\d)\s+([AP]M),/sprintf ",%02d:%02d%s,", $1,$2,lc $3/ei' phase1export.csv > phase1sys1.csv(重命名原始导出的查询),效果很好。
    • 你不能运行any_program foo > foo,因为首先shell会打开foo进行写入,所以它会丢弃foo的内容。这是常见的 shell 行为。
    • Hynek - 感谢您的澄清! justintime——谢谢你的建议。我相信我会重写 postgresql 查询以输出到 phase1export。那么 perl 脚本将是:phase1export.csv > phase1sys1.csv 然后我可以将这两个文件移动到历史文件夹,修改名称以包含日期戳。现在,我将有办法在出现问题时添加一定程度的故障排除。感谢大家对我的帮助!
    猜你喜欢
    • 2015-10-14
    • 1970-01-01
    • 2021-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-27
    • 2013-03-12
    相关资源
    最近更新 更多