Linux awk重排字段技巧

使用 awk 重排字段

awk 默认以空格或制表符为分隔符,通过 $1, $2, ... 表示字段($0 为整行)。

基本语法

command | awk '{print $3, $1, $2}'  # 输出第3列、第1列、第2列

示例场景

  1. 调整列顺序
    ls -l 输出的权限列(第1列)与文件名列(第9列)互换:

    ls -l | awk '{print $9, $2, $3, $4, $5, $6, $7, $8, $1}'
  2. 选择部分列
    提取 ps aux 的进程ID(第2列)和命令(第11列):

    ps aux | awk '{print $2, $11}'
  3. 自定义分隔符
    若字段以逗号分隔(如CSV文件),用 -F 指定分隔符:

    echo "Alice,30,Engineer" | awk -F ',' '{print $3, $1}'  # 输出:Engineer Alice
  4. 在字段间插入固定文本:

    df -h | awk '{print "分区: " $1, "可用空间: " $4}'

其他工具的组合使用

  1. 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
  2. sed 调整固定格式(不推荐复杂重排)
    仅适用于严格对齐的文本(如交换前两列):

    sed -E 's/(\S+)\s+(\S+)/\2 \1/' file.txt

注意事项

  1. 分隔符处理

    • 默认分隔符为连续空格/制表符,若需保留空格,用 -F 指定明确分隔符(如 -F':')。
    • 含空格的字段(如文件名)需结合 OFS(输出分隔符):
      ls -l | awk 'BEGIN {OFS=" | "} {print $9, $1}'
  2. 表头处理
    若输出含表头(如 ls -l 的首行),用 NR>1 跳过:

    ls -l | awk 'NR>1 {print $9, $1}'
  3. 多命令组合
    复杂场景可串联多个工具(如 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

(0)
酷番叔酷番叔
上一篇 2025年6月16日 07:39
下一篇 2025年6月16日 08:33

相关推荐

  • Linux中SVN锁定无法提交怎么解决?

    核心清理命令:svn cleanup当工作副本因锁定文件残留或状态异常无法更新/提交时,执行:svn cleanup [工作副本路径]作用:移除残留的锁定文件(*.lock)、恢复中断操作前的状态、清理临时文件,示例:cd /path/to/your/svn_working_copy # 进入工作副本目录svn……

    2025年7月8日
    900
  • 如何定位Linux服务器?

    在企业运维、开发调试或系统管理中,快速定位Linux机器是常见需求,本文提供7种专业方法,涵盖本地网络、远程环境及云平台场景,所有操作均通过Linux原生工具实现,本地网络环境查找基础主机信息确认# 查看本机主机名与IPhostname -I # 显示所有IP地址hostnamectl # 查看详细主机信息扫描……

    2025年6月14日
    1600
  • Linux启动Oracle需dba权限?

    启动前的必备检查环境变量配置使用Oracle用户登录(避免root直接操作):su – oracle检查核心变量(ORACLE_HOME, ORACLE_SID, PATH):echo $ORACLE_SID # 确认实例名(如orcl)echo $ORACLE_HOME # 确认安装路径(如/u01/app……

    3天前
    600
  • 如何用cut命令选择第3和第5字段?

    核心语法cut -d '分隔符' -f 3,5 文件名-d:指定字段分隔符(默认是制表符\t),-f:指定要提取的字段位置,用逗号分隔不连续的字段(如3,5),操作步骤与示例示例1:基本用法(以空格分隔)假设文件data.txt内容如下:Alice 25 Engineer USA 5000Bob……

    2025年7月12日
    900
  • hosts文件的作用是什么?位置在哪里?

    在Linux系统中,hosts文件是一个用于本地域名解析的核心配置文件,它允许用户手动指定主机名(域名)与IP地址的映射关系,优先级高于DNS服务器查询,以下从生效机制、操作步骤到注意事项的完整指南,帮助您安全高效地管理hosts文件,核心功能:当系统访问一个域名(如example.com)时,首先查询host……

    2025年6月30日
    1100

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信