【问题标题】:Shell script to append string to the end of all CSV fields in 2nd column用于将字符串附加到第二列中所有 CSV 字段末尾的 Shell 脚本
【发布时间】:2012-03-19 06:46:32
【问题描述】:

我正在尝试编写一个 BASH 脚本,它将 :00:00 附加到 CSV 文件第二个字段中所有值的末尾。

我已尝试通读“awk”手册页,但我不明白如何才能完成此操作。任何帮助表示赞赏!

源文件:

2012-02-29,00,Manhatten,New York,244
2012-02-29,01,Manhatten,New York,246
2012-02-29,02,Manhatten,New York,554
2012-02-29,03,Manhatten,New York,854
2012-02-29,04,Manhatten,New York,488

结果文件:

2012-02-29,00:00:00,Manhatten,New York,244
2012-02-29,01:00:00,Manhatten,New York,246
2012-02-29,02:00:00,Manhatten,New York,554
2012-02-29,03:00:00,Manhatten,New York,854
2012-02-29,04:00:00,Manhatten,New York,488

【问题讨论】:

    标签: linux bash parsing shell awk


    【解决方案1】:

    下面是过滤转换的命令:

    awk 'BEGIN { FS=","; OFS="," } (NF>=2) { $2=$2 ":00:00"; } (1)'
    

    如果你有一个文件source.txt 存储源数据和一个文件result.txt 存储输出,下面的命令会做:

    awk 'BEGIN { FS=","; OFS="," } (NF>=2) { $2=$2 ":00:00"; } (1)' source.txt >result.txt
    

    如果您有多个输入文件,您可以将它们添加到参数中。 详情请见manpage of awk

    【讨论】:

    • 您好 kamae,感谢您的回复。如果我在脚本文件中使用它,我将在哪里包含输入和输出文件?即awk 'BEGIN { FS=","; OFS="," } (NF>=2) { $2=$2 ":00:00"; } (1)', input.csv > output.csv
    • @SirOracle,感谢您的评论。我添加了一个描述您的评论的示例。
    • 相同,但短一点:awk -F, -v OFS=, '$2=$2":00:00"'
    【解决方案2】:

    使用 perl 的一个内衬

    perl -F, -nae '$F[1].=":00:00";print join(",", @F);'
    

    【讨论】:

      【解决方案3】:

      您也可以使用sed(这将是我的首选),但使用awk 也可以..

      您需要在每一列中提取值,然后将它们打印回来,但是在打印第二列时,附加您的 :00:00

      查看此示例,如果您有一些具体问题,请试一试并回复:

      $ cat a.txt
      2012-02-29,00,Manhatten,New York,244
      2012-02-29,01,Manhatten,New York,246
      2012-02-29,02,Manhatten,New York,554
      2012-02-29,03,Manhatten,New York,854
      2012-02-29,04,Manhatten,New York,488
      $ awk -F , '{print $1 "-" $2 "-" $3 "-" $4 "-" $5}' a.txt
      2012-02-29 - 00 - Manhatten - New York - 244
      2012-02-29 - 01 - Manhatten - New York - 246
      2012-02-29 - 02 - Manhatten - New York - 554
      2012-02-29 - 03 - Manhatten - New York - 854
      2012-02-29 - 04 - Manhatten - New York - 488
      $
      

      【讨论】:

        【解决方案4】:

        这可能对你有用:

        sed 's/,/:00:00,/2' file
        2012-02-29,00:00:00,Manhatten,New York,244
        2012-02-29,01:00:00,Manhatten,New York,246
        2012-02-29,02:00:00,Manhatten,New York,554
        2012-02-29,03:00:00,Manhatten,New York,854
        2012-02-29,04:00:00,Manhatten,New York,488
        

        或者这个:

        awk  '{sub(/,../,"&:00:00")}1' file
        2012-02-29,00:00:00,Manhatten,New York,244
        2012-02-29,01:00:00,Manhatten,New York,246
        2012-02-29,02:00:00,Manhatten,New York,554
        2012-02-29,03:00:00,Manhatten,New York,854
        2012-02-29,04:00:00,Manhatten,New York,488
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2022-12-11
          • 2017-09-29
          • 2014-03-06
          • 2020-08-19
          • 2014-04-17
          • 1970-01-01
          • 1970-01-01
          • 2020-12-19
          相关资源
          最近更新 更多