【问题标题】:How to join first n lines in a file如何加入文件中的前 n 行
【发布时间】:2010-10-13 00:41:18
【问题描述】:

我正在尝试清理一些数据,我最终希望将其转换为 CSV 格式。

我已经使用了一些正则表达式来清理它,但是我卡在了一步。

我想用逗号替换除每三个换行符 (\n) 之外的所有换行符。

数据如下:

field1
field2
field3
field1
field2
field3

等等。

我需要它

field1,field2,field3
field1,field2,field3

谁有使用 sed 或 awk 的简单方法?我可以编写一个程序并使用带有 mod 计数器的循环来擦除每个第一个和第二个换行符,但如果可能的话,我宁愿从命令行进行。

【问题讨论】:

    标签: regex linux sed awk


    【解决方案1】:

    这可能对你有用:

    paste -sd',,\n' file
    

    或者这个:

    sed '$!N;$!N;y/\n/,/' file
    

    【讨论】:

      【解决方案2】:

      使用 awk:

      awk '{n2=n1;n1=n;n=$0;if(NR%3==0){printf"%s,%s,%s\n",n2,n1,n}}' yourData.txt
      

      此脚本保存最后三行并在每第三行打印一次。不幸的是,这仅适用于具有 3 行倍数的文件。

      更通用的脚本是:

      awk '{l=l$0;if(NR%3==0){print l;l=""}else{l=l","}}END{if(l!=""){print substr(l,1,length(l)-1)}}' yourData.txt
      

      在这种情况下,最后三行连接在一个字符串中,当行号不是 3 的倍数时插入逗号分隔符。在文件末尾,如果字符串不为空,则打印该字符串删除了结尾的逗号。

      【讨论】:

        【解决方案3】:

        awk '{ORS=NR%3?",":"\n";print}' urdata.txt

        【讨论】:

          【解决方案4】:

          Solaris 上使用 nawk/usr/xpg4/bin/awk

          awk 'ORS=NR%3?OFS:RS' OFS=, infile
          

          【讨论】:

            【解决方案5】:

            vim 版本:

            :1,$s/\n\(.*\)\n\(.*\)\n/,\1,\2\r/g
            

            【讨论】:

              【解决方案6】:

              一个更短一点的 Perl 解决方案,它可以处理不包含 3 行倍数的文件:

              perl -pe 's/\n/,/ if(++$i%3&&! eof)' yourData.txt
              

              【讨论】:

              • 非三合一文件的好一个。我知道我的没有处理它,但我在 3 分钟内没有看到解决方案。
              【解决方案7】:

              awk 版本:

              awk '{if (NR%3==0){print $0;}else{printf "%s,", $0;}}'
              

              【讨论】:

                【解决方案8】:

                猫文件 | perl -ne 'chomp();打印 $_, !(++$i%3) ? "\n" : ",";'

                【讨论】:

                  猜你喜欢
                  • 2015-04-21
                  • 2010-12-18
                  • 1970-01-01
                  • 2021-01-03
                  • 1970-01-01
                  • 1970-01-01
                  • 2016-05-26
                  相关资源
                  最近更新 更多