您能给我一个提示,我可以使用哪个 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 代码将受到青睐,但我很感谢您的帮助。
干杯 马什
最佳答案
使用 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
:使列均匀
关于macos - Unix 命令(Mac 操作系统): cut and move rows,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24253399/