【问题标题】:Replace \n", with ", [duplicate]将 \n", 替换为 ", [重复]
【发布时间】:2014-02-20 13:03:20
【问题描述】:

我的文件中有如下格式的数据

"253539","","Company1 Name  
","0","1"
"255229","","Ramu ","0","1"
"253548","","Mater Name/Id 
","0","1"
"255229","","Ram Lakh","0","1"
"253619","","CHild Name/Ids 
","0","1"

每一行都附加了\n。

如何在 shell 脚本中将 \n", 替换为 ", 以获取输出为

"253539","","Company1 Name/Id  ","0","1"
"255229","","Ramu ","0","1"
"253548","","Mater Name/Id ","0","1"
"255229","","Ram Lakh","0","1"
"253619","","CHild Name/Id ","0","1"

需要自动化一个过程,所以必须写在 shell 脚本中。

请帮忙。

【问题讨论】:

    标签: bash shell sh


    【解决方案1】:

    不确定是否可以在 shell 中轻松完成此操作,但我制作了一个一次性的 Perl 脚本来执行此操作:

    perl -e 'foreach (<>) { chop; print; print "\n" if /"$/ }' < mydata.csv
    

    仅当行以" 结尾时才输出换行符。

    【讨论】:

      【解决方案2】:

      可以做类似的事情

      #!/bin/bash
      
      while read -r line; do
       [[ $line =~ '"'$ ]] && echo "$line" || echo -n "$line"
      done < file
      

      例如在您的输入文件上

      > ./abovescript
      "253539","","Company1 Name","0","1"
      "255229","","Ramu ","0","1"
      "253548","","Mater Name/Id","0","1"
      "255229","","Ram Lakh","0","1"
      "253619","","CHild Name/Ids","0","1"
      

      【讨论】:

        【解决方案3】:

        使用awk,您可以:

        $ awk '/"$/ {print a$0; a=""; next} {a=$0}' file
        "253539","","Company1 Name  ","0","1"
        "255229","","Ramu ","0","1"
        "253548","","Mater Name/Id ","0","1"
        "255229","","Ram Lakh","0","1"
        "253619","","CHild Name/Ids ","0","1"
        

        它的作用是将行存储在a 中,以防它不以" 结尾。如果是,则打印存储的行加上当前行。

        【讨论】:

          【解决方案4】:

          如果@fedorqui 的回答可以被接受,那么这里是较短的代码。

          awk '{printf $0 (/"$/?RS:X)}' file
          

          【讨论】:

            猜你喜欢
            • 2011-07-01
            • 1970-01-01
            • 2021-10-21
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多