cut 命令通过 -d 指定分隔符、-f 指定字段序号进行硬切,要求分隔符统一且位置固定;默认仅识别 tab,空格/逗号等需显式指定;支持单列、多列、范围等多种 -f 写法;无法自动跳过表头或处理缺失字段,需配合 tail、-s 等参数或改用 awk。

用 cut 按指定分隔符提取字段,核心是 -d 和 -f 配合使用。它不分析语义、不处理引号、不补缺失列,只做“硬切”,所以必须确保分隔符统一、位置固定。
指定分隔符必须显式写 -d
cut 默认只认 Tab(^I),不是空格,也不是逗号。哪怕文件看着像用空格或逗号分开,也得明确告诉它:
- 逗号分隔:用
cut -d',' -f2 file.csv提取第二列 - 冒号分隔:如
/etc/passwd,用cut -d: -f1,6 /etc/passwd提用户名和家目录 - 空格分隔:用
cut -d' ' -f3 log.txt——注意:多个连续空格会被切出空字段,容易错位 - Tab 分隔最稳妥:可用
cat -A file确认是否真有^I,再直接用cut -f2 file(省略-d)
字段编号从 1 开始,支持多种范围写法
-f 后面的数字不是下标,是自然序号。写法灵活:
本文档主要讲述的是Android linux内核介绍;Android内核是基于Linux 2.6内核的(目前最新开发版本是2.6.31),它是一个增强内核版本,除了修改部分Bug外,它提供了用于支持Android平台的设备驱动,希望本文档会给有需要的朋友带来帮助;感兴趣的朋友可以过来看看
-
-f3:只取第 3 列 -
-f1,4,7:取第 1、4、7 列(逗号分隔,无空格) -
-f2-5:取第 2 到第 5 列(含) -
-f-3:取前 3 列(即第 1、2、3 列) -
-f5-:从第 5 列到行尾
跳过表头或过滤脏行要靠组合命令
cut 本身不能跳首行,也不能自动忽略无分隔符的行:
- 跳过第一行(比如 CSV 表头):
tail -n +2 data.csv | cut -d',' -f2 - 只处理含分隔符的行(避免把注释或空行当有效数据):
cut -d',' -f2 -s data.csv,加-s参数后,不含逗号的行直接被跳过 - 调试分隔符是否真实存在:
head -3 data.csv | cat -A,看逗号是字面逗号,还是被转义或混入空格
字段缺失时 cut 会静默跳过,不是 bug 是设计
如果某行缺少你指定的分隔符(比如 CSV 中漏了逗号),cut 默认把它整个当第 1 列;但你写了 -f2,它找不到第 2 列,就直接不输出该行,也不报错——只会安静跳过。
这种情况下,别强行用 cut。改用 awk -F',' '{print $2}',它对缺字段默认输出空值,更可靠。










