请你给我一个提示,我可以使用哪个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
答案 0 :(得分:3)
我会选择来自split
的{{1}}和paste
。请尝试以下命令:
coreutils
输出:
split -l3 infile
paste -d' ' xaa xab xac | column -t
答案 1 :(得分:3)
使用perl one-liner
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 :(得分:0)
这是一个oneliner:
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
答案 3 :(得分:0)
我使用ruby
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")
希望能提供帮助:)