Linux常用命令学习笔记:cut

1. 命令概述

  • 命令名称cut
  • 核心功能:从文件的每一行中剪切出指定的部分(列、字符、字节)
  • 主要用途:文本处理、数据提取、日志分析、CSV文件处理

2. 语法格式

cut [选项] [文件]

3. 常用选项

选项说明
-b字节位置剪切
-c字符位置剪切
-f字段(列)剪切
-d指定字段分隔符(默认为制表符)
-s不显示不包含分隔符的行
-n与 -b 一起使用,不分割多字节字符
--complement补集选择,显示未被选中的部分
--output-delimiter指定输出分隔符
--help显示帮助信息
--version显示版本信息

4. 位置指定格式

  • 单个位置N(第 N 个)
  • 范围N-M(从 N 到 M)
  • 起始到结束N-(从 N 到行尾)
  • 开始到指定-M(从行首到 M)
  • 多个位置:用逗号分隔,如 1,3,5 或 1-3,5-7

5. 常用实例详解

(1) 按字符位置剪切

# 提取每行的第1-5个字符
cut -c 1-5 file.txt

# 提取第1、3、5个字符
cut -c 1,3,5 file.txt

# 提取第3个字符到行尾
cut -c 3- file.txt

# 提取行首到第5个字符
cut -c -5 file.txt

(2) 按字节位置剪切

# 提取每行的第1-10个字节
cut -b 1-10 file.txt

# 提取第2、4、6个字节
cut -b 2,4,6 file.txt

(3) 按字段(列)剪切

# 提取第1列(默认分隔符为制表符)
cut -f 1 file.txt

# 使用逗号作为分隔符,提取第2列
cut -d ',' -f 2 file.csv

# 提取第1列和第3列
cut -d ',' -f 1,3 file.csv

# 提取第2列到第4列
cut -d ',' -f 2-4 file.csv

# 提取第3列到最后一列
cut -d ',' -f 3- file.csv

# 不显示不包含分隔符的行
cut -d ',' -s -f 1 file.csv

(4) 指定输出分隔符

# 使用分号作为输出分隔符
cut -d ',' -f 1,3 --output-delimiter=';' file.csv

(5) 补集选择

# 显示除了第2列以外的所有列
cut -d ',' -f 2 --complement file.csv

6. 实际应用场景

场景一:日志文件分析

# 提取日志中的时间戳(假设时间戳在前19个字符)
cut -c 1-19 access.log

# 提取IP地址(假设IP在第1列,空格分隔)
cut -d ' ' -f 1 access.log

# 提取状态码和请求路径(第9列和第7列)
cut -d ' ' -f 7,9 access.log

场景二:CSV文件处理

# 提取CSV文件的姓名和邮箱列(假设第1列和第3列)
cut -d ',' -f 1,3 users.csv

# 统计每列的唯一值数量
cut -d ',' -f 1 users.csv | sort | uniq -c

场景三:系统信息提取

# 提取/etc/passwd文件中的用户名(第1列)
cut -d ':' -f 1 /etc/passwd

# 提取用户ID和家目录(第3列和第6列)
cut -d ':' -f 3,6 /etc/passwd

# 提取所有用户的家目录
cut -d ':' -f 6 /etc/passwd

场景四:配置文件处理

# 提取环境变量中的路径
echo $PATH | cut -d ':' -f 1-3

# 提取IP地址的网段
echo "192.168.1.100" | cut -d '.' -f 1-3

7. 与其他命令的组合使用

(1) 结合 grep 过滤

# 查找包含"error"的行,并提取时间戳
grep "error" app.log | cut -c 1-19

# 查找特定用户,提取家目录
grep "tom" /etc/passwd | cut -d ':' -f 6

(2) 结合 sort 和 uniq 统计

# 统计访问最多的IP地址
cut -d ' ' -f 1 access.log | sort | uniq -c | sort -nr

# 统计状态码出现次数
cut -d ' ' -f 9 access.log | sort | uniq -c

(3) 结合 awk 处理复杂格式

# 对于复杂分隔符,cut 和 awk 可以配合使用
awk -F '[ :]+' '{print $1}' file.txt | cut -d ' ' -f 1

8. 注意事项

  1. 分隔符问题:默认分隔符是制表符,不是空格,使用 -d ' ' 指定空格分隔
  2. 多字节字符-c 按字符处理,-b 按字节处理,对于中文等多字节字符要使用 -c
  3. 字段编号:字段编号从1开始,不是0
  4. 空行处理:空行也会被处理,可以使用 -s 过滤不包含分隔符的行
  5. 性能考虑:对于大文件,cut 比 awk 更快,但功能相对简单

9. 与 awk 命令的区别

命令功能特点适用场景
cut简单、快速,只能按固定位置或分隔符提取简单的列提取、固定格式文件处理
awk功能强大,支持条件判断、计算、格式化输出复杂文本处理、数据转换、报表生成

核心要点总结

  • cut 用于从文本中提取指定的列、字符或字节
  • 三种提取方式-c(字符)、-b(字节)、-f(字段)
  • 常用选项-d(指定分隔符)、-s(过滤无分隔符行)
  • 位置指定NN-MN--MN,M,O
  • 实际应用:日志分析、CSV处理、系统信息提取
  • 性能优势:处理大文件时比 awk 更快
  • 功能局限:不支持条件判断和复杂计算,适合简单提取任务

作 者:南烛
链 接:https://www.itnotes.top/archives/235
来 源:IT笔记
文章版权归作者所有,转载请注明出处!


上一篇
下一篇