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

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

夏夕资源网专注于CMS网站模板,主流语言整站网站源码下载,网站建设相关教程分享,好用的软件素材整合下载,提供一站式便捷自助服务。
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"zy.lucklyus.top",如遇到无法解压的请联系管理员!
夏夕资源网-网站模板_免费源码_资源素材 » Linux怎么处理文本列 Linux使用awk提取文本指定列【进阶】-LINUX
在线时间:12:00 - 22:00
关注微信公众号:微信公众号
站长邮箱:[email protected]
  • 运营天数: 1391+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 3994798+
  • 本周更新: 0+
  • 最后更新: 2026-03-16

本站指数

×
  • 运营天数: 1391+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 3994799+
  • 本周更新: 0+
  • 最后更新: 2026-03-16