【问题标题】:Shell command to delete \n on 1 out of 2 line on a file [duplicate]Shell命令在文件的2行中的1行中删除\ n [重复]
【发布时间】:2016-12-07 11:10:46
【问题描述】:

我正在寻找一个 shell 命令来删除两行中的一行的返回战车。 我有一个这样的文件:

1.32640997
;;P
1.14517534
;;P
1.16120958
;;P
...

我想要这样的东西:

1.32640997;;P
1.14517534;;P
1.16120958;;P
...

有可能吗? 谢谢

【问题讨论】:

    标签: shell


    【解决方案1】:

    使用 GNU paste

    paste -d '' - - < file
    

    使用 BSD paste

    paste -d '\0' - - < file
    

    paste 从标准输入生成两列,以- - 作为参数,三列以- - - 作为参数,依此类推。

    -d是指定列分隔符,使用'\0'表示无分隔符。

    使用 Perl

    perl -ne 'chomp($prev = $_); print $prev, scalar <>' < file
    

    【讨论】:

      【解决方案2】:

      使用 xargs:

      xargs -n 2 -d '\n' printf '%s%s\n' <file
      

      【讨论】:

        【解决方案3】:

        使用 awk

        $ awk '{printf "%s%s",$0,(NR%2==0?ORS:"")}' File
        1.32640997;;P
        1.14517534;;P
        1.16120958;;P
        

        这将打印每一行,奇数行不打印,偶数行打印输出记录分隔符。

        使用 sed

        这是通过成对阅读来实现的:

        $ sed 'N; s/\n//' File
        1.32640997;;P
        1.14517534;;P
        1.16120958;;P
        

        N 读取下一行,s/\n// 删除换行符。

        【讨论】:

        • 作为记录,这比我的 paste 解决方案要好,因为 sed 和 awk 更广泛可用(例如,如果我没记错的话,在 Git Bash 中没有 paste
        猜你喜欢
        • 1970-01-01
        • 2023-03-23
        • 2017-11-30
        • 1970-01-01
        • 2020-05-20
        • 2013-03-02
        • 2014-11-11
        • 2012-11-15
        • 1970-01-01
        相关资源
        最近更新 更多