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下如何执行imp

    Linux下,通过命令行进入Oracle用户,使用imp命令并指定相关参数,如用户、密码、

    2025年8月17日
    9400
  • Linux线程的底层实现机制在内核层面究竟是如何运作的?

    在Linux操作系统中,线程的实现并非内核层面的“原生线程”,而是基于轻量级进程(LWP, Light Weight Process)和用户态线程库(如NPTL, Native POSIX Threads Library)的组合机制,这种设计既兼顾了内核调度的效率,又符合POSIX线程标准(pthread),为……

    2025年8月31日
    10200
  • Linux系统如何关闭NUMA节点以提高性能?

    在Linux系统中,NUMA(Non-Uniform Memory Access,非一致内存访问)是一种针对多处理器系统的内存架构设计,通过将内存划分为多个节点(Node),每个节点关联特定的CPU核心,以优化本地内存访问效率,但在某些场景下,如单进程内存需求极大、跨节点内存访问导致性能下降,或应用与NUMA兼……

    2025年8月22日
    9400
  • linux如何打开一个端口映射

    在Linux系统中,端口映射(通常指端口转发)是将网络流量从一个IP地址和端口转发到另一个IP地址和端口的过程,常用于内网服务暴露到公网、容器端口映射等场景,实现端口映射的主要工具包括iptables(传统Linux防火墙)和firewalld(CentOS 7+、RHEL 7+等系统默认防火墙),下面分别介绍……

    2025年10月3日
    7900
  • Linux如何备份整个硬盘?

    在Linux系统中,备份整个硬盘是保障数据安全的重要操作,无论是系统迁移、硬件故障还是误操作,完整的硬盘备份都能快速恢复系统环境,本文将详细介绍Linux环境下备份整个硬盘的常用方法、工具及注意事项,帮助用户高效完成备份任务,备份前的准备工作在开始备份前,需明确以下几点:确认硬盘设备名:使用lsblk或fdis……

    2025年9月28日
    9600

发表回复

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

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信