当前位置: 首页 > news >正文

Linux 中文本处理:cut 和 awk命令

cutawk都是 Linux 中用于文本处理的命令行工具,常用于从文件或数据流中提取、处理和分析文本。cut偏向简单、快速的列提取,而awk是一个完整的文本处理编程语言,功能强大得多。

一、cut命令:简单列提取

cut用于按列(字段)或字符位置从文本中提取数据,适合处理结构化的表格数据(如 CSV、日志)。

1. 基本语法

cut -d 分隔符 -f 字段列表 文件 cut -c 字符范围 文件

2. 常用选项

选项含义示例
-d指定字段分隔符(默认是制表符\t-d','指定逗号分隔
-f指定要提取的字段(列)-f1,3提取第1和第3列
-c按字符位置提取-c1-5提取第1到第5个字符
--complement提取指定字段以外的字段-f2 --complement提取除第2列外的所有列

3. 使用示例

示例 1:提取 CSV 文件中的列
# 假设 data.csv 内容: # 姓名,年龄,城市 # Alice,25,北京 # Bob,30,上海 # 提取第 1 列和第 3 列 cut -d',' -f1,3 data.csv # 输出: # 姓名,城市 # Alice,北京 # Bob,上海 # 提取第 2 列(年龄) cut -d',' -f2 data.csv # 输出: # 年龄 # 25 # 30
示例 2:提取日志文件中的特定字段
# 提取 /etc/passwd 中的用户名(第1列)和 shell(第7列) cut -d':' -f1,7 /etc/passwd | head -3 # 输出: # root:/bin/bash # daemon:/usr/sbin/nologin # bin:/usr/sbin/nologin
示例 3:按字符位置提取
# 提取每行的前 10 个字符 cut -c1-10 file.txt # 提取每行的第 5 到第 15 个字符 cut -c5-15 file.txt # 提取每行的第 10 个字符 cut -c10 file.txt
示例 4:配合管道使用
# 查看占用内存前 5 的进程(提取 PID 和 CMD) ps aux --sort=-%mem | head -6 | tail -5 | cut -c10-20,50-

二、awk命令:文本处理编程语言

awk是一个强大的文本分析工具,它更像一门编程语言,支持变量、条件判断、循环、数组等,适合更复杂的文本处理任务。

1. 基本语法

awk '模式 { 动作 }' 文件
  • 模式:条件,如NR>1/error/

  • 动作:对匹配行执行的操作,如print $1sum+=$3

2. 常用内置变量

变量含义
$0整行内容
$1,$2...第1列、第2列...
NF当前行的列数(Number of Fields)
NR行号(从1开始)
FS输入字段分隔符(Field Separator)
OFS输出字段分隔符
RS输入记录分隔符(行分隔符)
ORS输出记录分隔符

3. 使用示例

示例 1:打印整行或特定列
# 打印整行 awk '{print $0}' file.txt # 打印第1列和第3列(默认以空格分隔) awk '{print $1, $3}' file.txt # 打印第2列和第5列,用逗号分隔 awk '{print $2 "," $5}' file.txt # 打印文件中的第 2 列 awk '{print $2}' data.txt
示例 2:指定分隔符
# 处理 CSV(逗号分隔) awk -F',' '{print $1, $3}' data.csv # 等价于: awk 'BEGIN{FS=","} {print $1, $3}' data.csv # 处理 /etc/passwd(冒号分隔) awk -F':' '{print $1, $7}' /etc/passwd
示例 3:条件过滤
# 打印文件头(第1行) awk 'NR==1' file.txt # 打印第 10 到第 20 行 awk 'NR>=10 && NR<=20' file.txt # 打印包含 "error" 的行 awk '/error/ {print $0}' log.txt # 打印第3列大于50的行 awk '$3 > 50 {print $0}' scores.txt # 打印第2列以 /bin/ 开头的行 awk '$2 ~ /^\/bin\// {print $0}' file.txt
示例 4:计算和统计
# 计算第3列的总和 awk '{sum += $3} END {print "总和:", sum}' data.txt # 计算行数 awk 'END {print "总行数:", NR}' file.txt # 计算第3列的平均值 awk '{sum += $3} END {print "平均值:", sum / NR}' data.txt # 统计每行的列数 awk '{print NF, $0}' file.txt
示例 5:格式化输出
# 自定义输出格式 awk '{printf "姓名: %-10s 年龄: %3d\n", $1, $2}' data.txt # 添加表头 awk 'BEGIN{print "姓名\t年龄"} {print $1"\t"$2}' data.txt

三、cutvsawk对比

特性cutawk
功能简单的列提取完整的文本处理语言
编程能力支持变量、循环、数组、条件判断
复杂计算不支持支持
分隔符单个字符支持正则表达式
学习难度中等
适用场景快速、简单的列提取复杂的文本处理和数据分析
http://www.jsqmd.com/news/1401246/

相关文章:

  • 程序员进阶:从技术实现到系统思维与工程实践的跃迁
  • 2026年实测:宁波3大奥数小升初机构综合评测
  • Embedding与向量数据库实战:从模型选型到RAG系统构建全解析
  • 基于MiniCPM5-1B的本地GMGN研究智能体部署与实践指南
  • 网络安全法实施与六大黄金专业方向解析
  • AI读论文到底靠不靠谱?实测5类工具,告诉你哪些能信、哪些别踩坑
  • 维普降AI怎么过,BunnyScholar按维普改最省心
  • OpenCore升级全攻略:从备份到验证的保姆级安全指南
  • 吉安除甲醛公司甲醛治理公司剖析:金耀环境除甲醛 - CMA甲醛检测中心
  • Ansible
  • TVA具身智能技术图谱(3):自主因果归因纠错机制
  • MODBUS通信中PLC V区访问:从映射原理到Python代码实现
  • NVIDIA Nemotron 3.5 Lightning:低延迟AI模型部署实战指南
  • 河池除甲醛公司甲醛治理公司剖析:金耀环境除甲醛 - CMA甲醛检测中心
  • 临沧除甲醛公司甲醛治理公司剖析:金耀环境除甲醛 - CMA甲醛检测中心
  • 全网19套热门表情包整理:从筛选逻辑到高效使用全攻略
  • 展锐春藤8910DM Cat.1模块开发实战:从芯片解析到OpenCPU应用
  • 对称信道容量计算:从原理到实践,掌握信息论核心工具
  • 生命涌现的小龙虾技能之【Aggressive Behavior Detection | 畜禽争斗行为识别】简介
  • 电动车托运哪家能上门取件?2026五大物流对比全攻略,打工人必看 - 快递物流资讯
  • OV9281图像传感器驱动开发实战:从规格书到稳定成像的完整指南
  • 鸡西除甲醛公司甲醛治理公司剖析:金耀环境除甲醛 - CMA甲醛检测中心
  • ArcGIS Pro合并操作全解析:要素与图层合并实战指南
  • 从Vibe Coding到Harness Engineering:驾驭AI编程的工程化实践
  • Docker官方镜像深度定制:从Dockerfile编写到生产级Nginx镜像构建
  • 《幻兽帕鲁》爆火背后的产品逻辑与社区传播机制分析
  • 辽源除甲醛公司甲醛治理公司剖析:金耀环境除甲醛 - CMA甲醛检测中心
  • 惠州除甲醛公司甲醛治理公司剖析:金耀环境除甲醛 - CMA甲醛检测中心
  • 结构体_联合体_枚举
  • 豆包 AI 优化服务该找谁合作?2026 年 8 月 5 家头部 GEO 机构多维对比,看完不再踩坑 - 品牌测评网