如何使用POSIX兼容工具在Bash中反转可变列数的表格列顺序
如何在POSIX兼容工具中反转任意列数的表格输出顺序
没问题,这个需求用标准AWK就能轻松实现,而且完全符合POSIX规范,不管表格有多少列都能自动适配,不需要提前知道列数。
核心命令
直接用这条AWK命令处理你的表格文件(比如table.txt):
awk '{for(i=NF;i>=1;i--) printf "%s%s", $i, (i>1?OFS:ORS)}' table.txt
如果需要将结果保存到新文件,加上重定向即可:
awk '{for(i=NF;i>=1;i--) printf "%s%s", $i, (i>1?OFS:ORS)}' table.txt > reversed_table.txt
命令详解
这个脚本的每一部分都是POSIX AWK的标准特性,没有依赖任何非扩展功能:
NF:AWK的内置变量,代表当前行的字段总数(也就是列数),会自动根据每行的内容动态计算,完美适配列数不固定的场景- 循环
for(i=NF;i>=1;i--):从最后一列开始,倒序遍历到第一列 printf "%s%s", $i, (i>1?OFS:ORS):- 打印当前列的内容
$i - 如果不是当前行的最后一列(
i>1),就输出字段分隔符OFS(默认是空格,和输入的列分隔符一致) - 如果是最后一列,就输出记录分隔符
ORS(默认是换行符),保证每行结束后自动换行
- 打印当前列的内容
示例验证
用你提供的输入测试:
Name Surname Age
Oli Aaa 15
Boa Bbb 25
运行命令后会得到预期输出:
Age Surname Name
15 Aaa Oli
25 Bbb Boa
扩展:自定义列分隔符
如果你的表格用的是其他分隔符(比如制表符\t),只需要指定-F设置输入分隔符,同时用-v OFS设置输出分隔符保持一致即可:
awk -F'\t' -v OFS='\t' '{for(i=NF;i>=1;i--) printf "%s%s", $i, (i>1?OFS:ORS)}' table.txt
内容的提问来源于stack exchange,提问作者M. Twarog
相关产品推荐
相关产品推荐

