Linux怎么处理文本列 Linux使用awk提取文本指定列【进阶】

发布时间 - 2026-01-31 00:00:00    点击率:
awk命令可实现Linux文本列的精细化处理:一、用-F指定分隔符提取列;二、结合正则条件筛选后输出;三、用正则FS或match/substr处理复杂字段;四、对列值进行算术运算与printf格式化;五、利用NR、RS等变量处理跨行数据。

如果您需要在Linux系统中对文本文件的列进行精细化处理,尤其是提取特定列并结合条件筛选、格式化或计算,awk命令提供了强大而灵活的进阶能力。以下是实现此类操作的具体方法:

一、使用awk按字段分隔符提取指定列

awk默认以空白字符(空格或制表符)为分隔符,通过$N可直接引用第N列。当文本使用非默认分隔符(如冒号、逗号、竖线)时,需显式指定-F选项。

1、提取/etc/passwd文件中用户名(第1列)和用户ID(第3列),以冒号为分隔符:
awk -F ':' '{print $1, $3}' /etc/passwd

2、提取CSV文件中第2列和第4列,以英文逗号为分隔符:
awk -F ',' '{print $2, $4}' data.csv

3、提取以竖线分隔的日志片段中第5列(响应状态码)和第8列(字节数):
awk -F '|' '{print $5, $8}' access.log

二、结合正则匹配条件筛选后提取列

awk支持在打印前对整行或某列执行模式匹配,仅对满足条件的记录执行列提取操作,避免冗余输出。

1、从netstat输出中提取所有处于ESTABLISHED状态的连接,并只显示本地端口(第4列)和远程地址(第5列):
netstat -tn | awk '$6 == "ESTABLISHED" {print $4, $5}'

2、从ps输出中筛选包含"nginx"的进程,提取PID(第2列)和命令名(第11列):
ps aux | awk '$11 ~ /nginx/ {print $2, $11}'

3、提取/etc/fstab中非注释、非空行的第1列(设备路径)和第2列(挂载点),跳过以#开头或全空白的行:
awk '!/^$/ && !/^\\s*#/ {print $1, $2}' /etc/fstab

三、使用自定义字段分隔符与动态列定位

当字段内容本身包含空格但逻辑上属于同一列(如日志中的带空格时间戳),可借助正则表达式定义FS,或用match()函数配合substr()精确定位。

1、将Apache日志中双引号包裹的User-Agent字段(通常为第12列)完整提取,避免被内部空格错误切分:
awk -F '"[^"]*"|\s+' '{print }' access.log

2、使用正则FS匹配多个连续空白作为分隔符,确保多空格对齐的列不被误判:
awk -F '\\s+' '{print $1, $NF}' aligned_data.txt

3、先用match()定位引号内起始位置,再用substr()截取完整字段:
awk '{start = match($0, /"([^"]*)"/); if (start) print substr($0, RSTART+1, RLENGTH-2)}' access.log

四、对提取列执行算术运算与格式化输出

awk内置变量和运算符支持对列值进行加减乘除、计数、求和、平均等操作,并可用printf实现对齐、补零、单位转换等格式控制。

1、统计系统中各用户启动的进程数,对第1列(USER)计数并排序:
ps -eo user= | awk '{count[$1]++} END {for (u in count) print u, count[u]}' | sort -k2,2nr

2、提取df输出中已用空间(第5列,含%符号),去除%并计算数值大于85的文件系统:
df | awk '$5 ~ /%$/ {sub(/%/, "", $5); if ($5 > 85) print $1, $5"%"}'

3、对日志中第10列(响应时间毫秒)求总和、均值与最大值:
awk '{sum += $10; if ($10 > max) max = $10; cnt++} END {printf "Sum: %d, Avg: %.2f,

Max: %d\n", sum, sum/cnt, max}' access.log

五、多行合并与跨行字段关联提取

利用awk的NR(总行号)、FNR(当前文件行号)、RS(输入记录分隔符)和ORS(输出记录分隔符)变量,可处理跨物理行逻辑上属于同一记录的文本,例如邮件头、JSON块或分段日志。

1、将邮件头中Subject和From字段合并为单行输出,以空行分隔不同邮件:
awk '/^Subject:/ {sub(/^Subject: */, ""); subj = $0; next} /^From:/ {sub(/^From: */, ""); print subj "\t" $0}' mail.txt

2、将多行JSON对象(每对象占多行)按字段提取:先设RS为空行,再用gsub()清理换行后解析:
awk 'BEGIN{RS=""} {gsub(/\n/, " ", $0); if ($0 ~ /"name":/) print $0}' json_blocks.txt

3、提取top命令动态输出中CPU使用率最高进程的命令名(第12列)和占用率(第9列),需跳过标题行:
top -bn1 | awk 'NR > 7 {if ($9 > max) {max = $9; cmd = $12}} END {print cmd, max}'


# linux  # js  # json  # 正则表达式  # apache  # nginx  # 字节  # access  # 端口  # csv  # ai  # linux系统  # print  # 运算符  # if  # count  # sort  # for  # mail  # printf  # 对象 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 手机网站制作与建设方案,手机网站如何建设?  在线制作视频的网站有哪些,电脑如何制作视频短片?  Laravel集合Collection怎么用_Laravel集合常用函数详解  如何在阿里云完成域名注册与建站?  详解jQuery中基本的动画方法  如何在阿里云虚拟主机上快速搭建个人网站?  如何在阿里云服务器自主搭建网站?  Laravel辅助函数有哪些_Laravel Helpers常用助手函数大全  Laravel Seeder怎么填充数据_Laravel数据库填充器的使用方法与技巧  Laravel如何操作JSON类型的数据库字段?(Eloquent示例)  Win11怎么关闭透明效果_Windows11辅助功能视觉效果设置  Win11怎么开启自动HDR画质_Windows11显示设置HDR选项  Laravel怎么实现模型属性的自动加密  如何用VPS主机快速搭建个人网站?  如何在香港服务器上快速搭建免备案网站?  Angular 表单中正确绑定输入值以确保提交与验证正常工作  Laravel怎么配置S3云存储驱动_Laravel集成阿里云OSS或AWS S3存储桶【教程】  如何在搬瓦工VPS快速搭建网站?  Laravel广播系统如何实现实时通信_Laravel Reverb与WebSockets实战教程  如何在云主机快速搭建网站站点?  为什么要用作用域操作符_php中访问类常量与静态属性的优势【解答】  Laravel怎么连接多个数据库_Laravel多数据库连接配置  油猴 教程,油猴搜脚本为什么会网页无法显示?  Python数据仓库与ETL构建实战_Airflow调度流程详解  Laravel如何实现API版本控制_Laravel版本化API设计方案  如何为不同团队 ID 动态生成多个独立按钮  html如何与html链接_实现多个HTML页面互相链接【互相】  如何在云服务器上快速搭建个人网站?  如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南  香港服务器建站指南:外贸独立站搭建与跨境电商配置流程  香港服务器租用每月最低只需15元?  Laravel怎么创建自己的包(Package)_Laravel扩展包开发入门到发布  C++用Dijkstra(迪杰斯特拉)算法求最短路径  Win11搜索栏无法输入_解决Win11开始菜单搜索没反应问题【技巧】  Laravel观察者模式如何使用_Laravel Model Observer配置  Edge浏览器怎么启用睡眠标签页_节省电脑内存占用优化技巧  青岛网站建设如何选择本地服务器?  如何挑选最适合建站的高性能VPS主机?  大同网页,大同瑞慈医院官网?  Laravel如何生成和使用数据填充?(Seeder和Factory示例)  微信小程序 闭包写法详细介绍  网站建设要注意的标准 促进网站用户好感度!  JavaScript Ajax实现异步通信  如何彻底卸载建站之星软件?  如何在橙子建站上传落地页?操作指南详解  Win10如何卸载预装Edge扩展_Win10卸载Edge扩展教程【方法】  Laravel如何实现本地化和多语言支持_Laravel多语言配置与翻译文件管理  如何快速建站并高效导出源代码?  打开php文件提示内存不足_怎么调整php内存限制【解决方案】  Laravel的辅助函数有哪些_Laravel常用Helpers函数提高开发效率