首页 > 解决方案 > 如何使用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 的工具来实现这一点。

标签: bashawksedgrep

解决方案


仅使用符合 POSIX 标准的工具

awkposix

但我不知道当列数只有 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 ""; }'

推荐阅读