macos - Unix 命令(Mac 操作系统): cut and move rows

标签 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   vi  9   i   xi

rsperl -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/

相关文章:

c - 在 Chrome 中查找包含 URL 的辅助功能元素

objective-c - 如何以编程方式退出 mac 应用程序?

perl - 为什么在使用 Date::Manip 时出现 "invalid zone in SetDate"错误?

Python转义sys argv中的特殊字符

swift - 将 NSString 绘制到 CALayer 中

objective-c - 开发一个在用户使用 xcode 登录之前运行的 osx 守护进程

linux - Setuid Perl 脚本适用于 Solaris,但不适用于 Linux

regex - 在一行匹配后替换为第 N 行中存在的字符串

linux - 比较两个文件脚本并找到不匹配的数据

linux - 循环遍历多个文件以获取多个字符串