ARTICLE DETAIL

资讯详情

深耕网站SEO优化与搜索引擎排名提升的一线实战洞察。

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

Linux 中文本处理:cut 和 awk命令 cut和awk都是 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 模式 { 动作 } 文件模式条件如NR1、/error/动作对匹配行执行的操作如print $1、sum$32. 常用内置变量变量含义$0整行内容$1,$2...第1列、第2列...NF当前行的列数Number of FieldsNR行号从1开始FS输入字段分隔符Field SeparatorOFS输出字段分隔符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 NR1 file.txt # 打印第 10 到第 20 行 awk NR10 NR20 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功能简单的列提取完整的文本处理语言编程能力无支持变量、循环、数组、条件判断复杂计算不支持支持分隔符单个字符支持正则表达式学习难度低中等适用场景快速、简单的列提取复杂的文本处理和数据分析
返回列表