在Mac终端用cut提取字段必须显式指定-d分隔符,否则仅识别Tab;空格、逗号等需加单引号如-d' ';-d后不可有空格;无分隔符行用-s过滤,缺失字段需改用awk;多列用-f1,3,5,排除列用-f2--complement。

在Mac终端中按指定分隔符提取字段时,必须显式用-d指定分隔符,否则cut默认只认Tab——空格、逗号、冒号等都不会被识别,直接执行会整行输出或报错跳过。
基础用法:用-d指定分隔符并用-f取列
输入 cut -d',' -f2 data.txt,表示以英文逗号为分隔符,提取每行第2个字段。
这一步不能省略-d;如果文件是用空格分隔的,必须写成 cut -d' ' -f3,注意单引号包裹空格,否则shell会把空格当命令分隔符解析失败。
【-d后必须紧跟分隔符字符,中间不能有空格】。比如 cut -d , -f2 是错的,会提示 unknown option — ','。
常见分隔符的正确写法
方法一:冒号分隔(如/etc/passwd)→ 执行 cut -d':' -f1,7 /etc/passwd,提取用户名和登录shell两列。
方法二:竖线分隔(如某些日志)→ 执行 cut -d'|' -f4-6 log.txt,提取第4到第6列。
方法三:制表符分隔(无需-d)→ 直接 cut -f2 file.tsv,因为默认分隔符就是Tab;但若不确定是否真为Tab,先用 cat -A file.tsv 看是否有^I标记。
处理不含分隔符的行
第一步:加-s选项过滤掉不含分隔符的行。例如 cut -d',' -s -f2 data.csv,这样只有含逗号的行才输出第2字段,避免整行误输出。
第二步:若想保留无分隔符行并让缺失字段显示为空,cut做不到——它遇到-f2但没找到第二个字段就直接跳过该行,此时应换用awk -F',' '{print $2}'。
第三步:调试前务必确认真实分隔符。运行 head -3 data.csv | cat -A,观察输出中是逗号、空格还是^I,再决定-d参数值。
取多列与反向截取
取第1、3、5列:cut -d';' -f1,3,5 input.txt。
排除第2列,保留其余所有列:cut -d',' -f2 --complement data.csv。
这一步要注意:--complement必须紧贴-f使用,顺序不能颠倒;写成 cut -f2 --complement -d',' 会报错 unrecognized option '--complement'。











