【问题标题】:Insert space after 3 characters in specific column in CSV file在 CSV 文件的特定列中的 3 个字符后插入空格
【发布时间】:2016-04-18 04:42:20
【问题描述】:

在下面的文件中,我想用一个空格字符分隔第 5 列中值的月份部分和日期部分。

输入文件:

22144842,860998142,1001409110,DLY,Jan4 2016,13:00,17:00
22084015,860902007,29465297,DLY,Jan4 2016,08:00,12:00
22034081,860845334,1001392391,DLY,Jan3 2016,13:00,17:00
22159924,861029758,1001411656,DLY,Jan3 2016,13:00,17:00
22068143,853558982,1001397841,DLY,Jan2 2016,13:00,17:00

所需的输出文件:

22144842,860998142,1001409110,DLY,Jan 4 2016,13:00,17:00
22084015,860902007,29465297,DLY,Jan 4 2016,08:00,12:00
22034081,860845334,1001392391,DLY,Jan 3 2016,13:00,17:00
22159924,861029758,1001411656,DLY,Jan 3 2016,13:00,17:00
22068143,853558982,1001397841,DLY,Jan 2 2016,13:00,17:00

我如何使用 AWK 语言或 sed 命令来做到这一点?

【问题讨论】:

    标签: string csv unix awk sed


    【解决方案1】:

    如果您在所有情况下都可以假设一个 3 个字母的月份名称,并且前面的字段都不包含逗号,那么您应该可以使用 sed 来做到这一点:

    sed -r 's/([^,]*,){4}[A-Z][a-z]{2}/& /' file
    

    前四个字段由零个或多个不是逗号[^,]* 后跟逗号的字符描述。月份名称由一个大写字母后跟两个小写字母描述。替换是与& 匹配的所有内容,之后添加一个空格。

    【讨论】:

      【解决方案2】:
      awk -F, -v OFS=, '{sub(/.../, "& ", $5)}1' File
      

      awk -F, -v OFS=, '{sub(/[A-Za-z]+/, "& ", $5)}1' File
      

      输出:

      22144842,860998142,1001409110,DLY,Jan 4 2016,13:00,17:00
      22084015,860902007,29465297,DLY,Jan 4 2016,08:00,12:00
      22034081,860845334,1001392391,DLY,Jan 3 2016,13:00,17:00
      22159924,861029758,1001411656,DLY,Jan 3 2016,13:00,17:00
      22068143,853558982,1001397841,DLY,Jan 2 2016,13:00,17:00
      

      5th 字段的第一个3 字符(/.../) 替换为相同的3 个字符(&),后跟space。或者,将 5th 字段开头的字符序列替换为 (&) 后跟 space 的序列。

      【讨论】:

      • 看起来不错 - 我建议在 -vOFS 之间添加一个空格,否则某些版本的 awk 将无法理解。
      【解决方案3】:

      这可能对你有用(GNU sed):

      sed -r 's/([^,]{0,3})([^,]*)/\1 \2/5' file
      

      将第五组非定界符一分为二,按要求排列。

      【讨论】:

        猜你喜欢
        • 2014-02-20
        • 2017-06-11
        • 2021-12-17
        • 2021-09-25
        • 1970-01-01
        • 1970-01-01
        • 2021-12-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多