做什么
按"字符位置"或"分隔符 + 字段号"截取列。比 awk 简单、比 awk 快——固定格式用 cut 更顺手。
常用参数
| 参数 |
含义 |
-d 'X' |
用 X 作为分隔符 |
-f N |
第 N 个字段 |
-f N-M |
第 N 到 M 个字段 |
-c N |
第 N 个字符 |
-c N-M |
第 N 到 M 个字符 |
--complement |
反选(除了指定的) |
实战
按字段(最常用)
# /etc/passwd 用 : 分隔
cut -d: -f1 /etc/passwd # 第 1 列(用户名)
cut -d: -f1,6 /etc/passwd # 第 1 和 6 列
cut -d: -f1-3 /etc/passwd # 第 1-3 列
# CSV
cut -d',' -f2 data.csv
# Tab 分隔(默认)
cut -f1 tabular.tsv
按字符位置
date | cut -c1-3 # 取前 3 字符(如 "Fri")
cut -c1-5 file.txt # 每行前 5 个字符
cut vs awk
| 场景 |
用 |
| 固定分隔符 + 取列 |
cut(简单快) |
| 多空白分隔 |
awk(cut 不擅长) |
| 涉及计算 / 条件 |
awk |
| 简单截字符串 |
cut -c 或 bash 参数展开 |
坑
- cut 对多个连续空格处理差——文本中
之间的空字段会被算作字段
- 如果分隔符是 Tab,用
-d $'\t' 或不带 -d(默认就是 Tab)
- cut 不能改顺序——
-f3,1 实际还是按 1,3 顺序输出