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如何创建普通用户

    命令useradd 用户名创建用户,passwd 用户名设置密码,也

    2025年8月15日
    7300
  • 为什么程序员都禁用这个开发神器?

    获取当前用户的UIDid 命令最常用的方法,直接显示当前用户及其所属组的UID/GID:id -u输出示例:1000(普通用户)或 0(root用户)参数说明:-u:仅显示用户UID(省略则显示全部信息)-g:显示主组GID-G:显示所有附属组GID$UID 环境变量Bash内置变量,适用于脚本中快速调用:ec……

    2025年7月29日
    9900
  • 如何在Linux系统中查看当前连接外网的本机真实IP地址?

    在Linux系统中,查看设备连接外网时的公网IP地址是常见需求,例如用于网络调试、服务器配置或安全验证,公网IP是由网络服务提供商(ISP)分配的,在互联网上唯一标识设备的地址,而本地IP(如192.168.x.x、10.x.x.x)是局域网内部地址,需通过NAT转换后才可访问外网,以下介绍几种常用方法,涵盖命……

    2025年9月15日
    6200
  • Linux运行exe竟如此简单?

    使用Wine(推荐)Wine(Wine Is Not an Emulator)是一个开源的兼容层,能在Linux/macOS上直接运行Windows程序,无需安装完整Windows系统,原理:将Windows API调用实时转换为Linux系统调用,实现无缝运行,安装与使用步骤(以Ubuntu为例):安装Win……

    2025年8月5日
    7800
  • linux 如何往上翻

    Linux 中,可通过键盘上的“Page Up”键或“Ctrl + B”组合键

    2025年8月10日
    8500

发表回复

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

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信