代码之家  ›  专栏  ›  技术社区  ›  Vijay

使用awk或sed连接两条连续线

  •  17
  • Vijay  · 技术社区  · 14 年前

    如何使用awk或sed连接两行?

    for e.g.:
    

    我有这样的数据:

    abcd
    joinabcd
    efgh
    joinefgh
    ijkl
    joinijkl
    

    我需要如下输出:

    joinabcdabcd
    joinefghefgh
    joinijklijkl
    
    6 回复  |  直到 6 年前
        1
  •  42
  •   Dimitre Radoulov    14 年前
    awk '!(NR%2){print$0p}{p=$0}' infile
    
        2
  •  5
  •   Vijay    14 年前
    awk 'BEGIN{i=1}{line[i++]=$0}END{j=1; while (j<i) {print line[j+1] line[j]; j+=2}}' yourfile
    

    不需要SED。

        3
  •  3
  •   Chris Koknat    9 年前

    他们说模仿是最真诚的奉承。
    下面是一个受Dimitre的awk代码启发的Perl解决方案:

    perl -lne 'print "$_$p" if $. % 2 == 0; $p = $_' infile
    

    $_ 是当前行
    $. 是线路号吗

        4
  •  2
  •   Beta    14 年前

    这里是SED:

    sed 'h;s/.*//;N;G;s/\n//g' < filename
    
        5
  •  0
  •   user1655920    10 年前

    上述“sed”脚本的一些改进将采取以下措施: 一千零八
    -27、34、402、132、904 二千八百四十六
    -27、34、14、838、45 四千六百三十六
    -27、34、135、59400 六千四百五十六
    -27、34、17、316、269 八千二百七十六
    -27、34、14、77、9617

      and make it :    
    

    1008-2734406.132904
    2846-2734414.838455
    4636-2734413.594009
    6456-2734417.316269
    8276-2734414.779617

      the "sed" is : "sed 'h;s/.*//;G;N;s/\n/ /g'"
    
        6
  •  0
  •   Bryon Nicoson    6 年前

    您可以将printf与三元一起使用:

        awk '{printf (NR%2==0) ? $0 "\n" : $0}'