Macos Unix命令(Mac OS):剪切和移动行

Macos Unix命令(Mac OS):剪切和移动行,macos,perl,bash,shell,unix,Macos,Perl,Bash,Shell,Unix,请告诉我可以使用哪个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

请告诉我可以使用哪个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
rs
perl-pne
只是转置它们,但正如您所看到的,我需要一个全新的安排。Perl代码将受到青睐,但我感谢任何帮助

干杯 marsch这里有一条单行线:

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

我会使用
coreutils
中的
split
paste
。请尝试以下命令:

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
我用红宝石

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")
希望对您有所帮助:)

使用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
    :使列均匀

很抱歉,订单不完全符合我的问题。