bash - 如何使用bash反转表格数据中的列顺序
问题描述
鉴于 bash 中某些程序的表格输出,我想更改打印列的顺序。假设列数可能会有所不同。
样本输入
Name Surname Age
Oli Aaa 15
Boa Bbb 25
预期产出
Age Surname Name
15 Aaa Oli
25 Bbb Boa
我试过的
当列数已知时,在我看来这是一项简单的任务,但是当列数仅为 N 时,我不知道该怎么做。对于 3 列,简单的 AWK 脚本会执行以下操作:
cat table.txt | awk '{print $3 $2 $1}' > reversed_table.txt
最好只使用符合 POSIX 的工具来实现这一点。
解决方案
仅使用符合 POSIX 标准的工具
awk
是posix。
但我不知道当列数只有 N 时该怎么办
现在这很容易。所以首先,awk
真的很灵活。将awk '{ i=5; print $i; }
打印第 5 列,就像那样。
其次,您可以使用 获取列数NF
。
现在,它只是编写一个简单的 for 循环并从 NF 迭代到第一个参数和 viola!
awk '{ for(i = NF; i >= 1; --i) printf "%s", $i "\t"; printf "\n" }'
没有尾随制表符的更好的版本:
awk '{ for(i = NF; i >= 1; --i) printf "%s", $i (i==1 ? "" : OFS); print ""; }'
推荐阅读
- pandas - pandas 过滤值计数有多个答案
- python - 如何在发布请求中修复“从模式解析电子邮件”
- tkinter - 如何在文本文件中写入 tkinter 条目?
- android - RxJava/Android Observable 对状态变化没有反应
- vue.js - 为什么自定义分隔符 {{{}}} 在 vuejs 中不起作用?
- nested - 是否可以在 vuepress 中有子路线和路线视图?
- join - 基于匹配两列连接两个表
- javascript - 后台脚本中的 if/else 不会在扩展单击时执行,但仅在解压缩扩展刷新后执行
- apache-spark - 如何修复'org.apache.spark.sql.catalyst.analysis.package$AnalysisErrorAt.failAnalysis(package.scala:42)'
- python - 在 PySpark 中加入查找表