【问题标题】:Unix Command (Mac OS): cut and move rowsUnix 命令 (Mac OS):剪切和移动行
【发布时间】:2014-08-06 20:25:43
【问题描述】:

您能否给我一个提示,我可以使用哪个 unix 命令来执行以下操作:

我想转换这些行...

1   a   i  
2   b   ii  
3   c   iii  
4   d   iv  
5   e   v  
6   f   vi  
7   g   vii  
8   h   viii  
9   i   xi 

...进入那些:

1   a   i   4   d   iv  7   g   vii  
2   b   ii  5   e   v   8   h   viii  
3   c   iii 6   f   vi  9   i   xi

rsperl -pne只是转置它们,但正如你所见,我需要一个全新的安排。 Perl 代码会受到青睐,但我很感谢您的帮助。

干杯 沼泽

【问题讨论】:

    标签: macos perl bash shell unix


    【解决方案1】:

    使用 perl 单行代码

    perl -lne 'push @{$l[($.-1) % 3]}, $_; }{ print "@$_" for @l' data.txt | column -t
    

    说明:

    开关

    • -l:开启行尾处理,指定行终止符
    • -n:为输入文件中的每一行创建一个while(<>){..} 循环。
    • -e:告诉perl 在命令行上执行代码。

    代码

    • push @{$l[($.-1) % 3]}, $_;: 将每一行推入以行号为模的数组中
    • }{ print "@$_" for @l:在处理结束时打印 3 元素数组
    • | column -t: 连列

    【讨论】:

      【解决方案2】:

      我用红宝石

      string = "1   a   i  
      2   b   ii  
      3   c   iii  
      4   d   iv  
      5   e   v  
      6   f   vi  
      7   g   vii  
      8   h   viii  
      9   i   xi "
      ary = string.split("\n")
      length = ary.size / 3
      new_ary = Array.new(3, "")
      
      ary.each_with_index do |e, i| 
        position = i % 3
        new_ary[position] += e
      end
      
      puts new_ary.join("\n")
      

      希望能帮到你:)

      【讨论】:

        【解决方案3】:

        我会选择来自coreutilssplitpaste。尝试以下命令:

        split -l3 infile
        paste -d' ' xaa xab xac | column -t
        

        输出:

        1  a  i    4  d  iv  7  g  vii
        2  b  ii   5  e  v   8  h  viii
        3  c  iii  6  f  vi  9  i  xi
        

        【讨论】:

          【解决方案4】:

          这是一个单线:

          perl -ne 'chomp; push @a,$_ if $_; unless($. % 3) {push @f,[@a]; @a = undef; shift @a} END {for my $i (@f) { for (@$i) {print "$_ "} print "\n"}}' filename.txt
          

          输出

          1 a i 2 b ii 3 c iii
          4 d iv 5 e v 6 f vi
          7 g vii 8 h viii 9 i xi
          

          【讨论】:

          • 抱歉,订单不完全符合我的问题。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-02-03
          • 1970-01-01
          • 2017-07-04
          • 2011-12-11
          • 2011-06-17
          • 1970-01-01
          • 2015-07-21
          相关资源
          最近更新 更多