使用 awk
重排字段
awk
默认以空格或制表符为分隔符,通过 $1, $2, ...
表示字段($0
为整行)。
基本语法
command | awk '{print $3, $1, $2}' # 输出第3列、第1列、第2列
示例场景
-
调整列顺序
将ls -l
输出的权限列(第1列)与文件名列(第9列)互换:ls -l | awk '{print $9, $2, $3, $4, $5, $6, $7, $8, $1}'
-
选择部分列
提取ps aux
的进程ID(第2列)和命令(第11列):ps aux | awk '{print $2, $11}'
-
自定义分隔符
若字段以逗号分隔(如CSV文件),用-F
指定分隔符:echo "Alice,30,Engineer" | awk -F ',' '{print $3, $1}' # 输出:Engineer Alice
-
在字段间插入固定文本:
df -h | awk '{print "分区: " $1, "可用空间: " $4}'
其他工具的组合使用
-
cut
+paste
(简单列提取与合并)
提取第1列和第3列后合并:cut -d' ' -f1 file.txt > col1.txt cut -d' ' -f3 file.txt > col3.txt paste col1.txt col3.txt > result.txt
-
sed
调整固定格式(不推荐复杂重排)
仅适用于严格对齐的文本(如交换前两列):sed -E 's/(\S+)\s+(\S+)/\2 \1/' file.txt
注意事项
-
分隔符处理
- 默认分隔符为连续空格/制表符,若需保留空格,用
-F
指定明确分隔符(如-F':'
)。 - 含空格的字段(如文件名)需结合
OFS
(输出分隔符):ls -l | awk 'BEGIN {OFS=" | "} {print $9, $1}'
- 默认分隔符为连续空格/制表符,若需保留空格,用
-
表头处理
若输出含表头(如ls -l
的首行),用NR>1
跳过:ls -l | awk 'NR>1 {print $9, $1}'
-
多命令组合
复杂场景可串联多个工具(如awk
过滤后通过sort
排序):ps aux | awk '{print $2, $11}' | sort -n
- 首选工具:
awk
是重排字段的最灵活方案,支持自定义分隔符、列选择及格式调整。 - 适用场景:
- 简单列提取 →
cut
- 动态重排/复杂逻辑 →
awk
- 固定格式微调 →
sed
- 简单列提取 →
- 安全提示:操作前用
head
命令测试样本(如command | head | awk '{...}'
),避免误处理大量数据。
引用说明:本文方法基于 GNU Awk 用户指南及 Linux 核心工具手册(AWK 官方文档,POSIX 标准),实践时请确保使用 Bash 4.0+ 或兼容环境。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/4640.html