用途
文本文件按列提取。
特点
过于简单,只能处理固定格式的分隔符,分隔符不能使用正则表达式。
用法
命令基本格式
- -b、-c、-f分别表示字节、字符、字段(即byte、character、field);
- list表示-b、-c、-f操作范围,-n常常表示具体数字;
- file表示的自然是要操作的文本文件的名称;
- delim(英文全写:delimiter)表示分隔符,默认情况下为TAB;
- -s表示不包括那些不含分隔符的行(这样有利于去掉注释和标题)
cut option list file
cut -b list [-n] [file ...]
cut -c list [file ...]
cut -f list [-d delim][-s][file ...]
list 范围的表示方法
表示 | 意义 |
---|---|
N | 只有第N项 |
N- | 从第N项一直到行尾 |
N-M | 从第N项到第M项(包括M) |
-M | 从一行的开始到第M项(包括M) |
- | 从一行的开始到结束的所有项 |
实例
经典应用
Linux中提取所有用户 cut -f 1 -d ':' /etc/passwd
以:作为分割符,提取第一个字段
去掉开始的命令提示符
cut -c 8- usercount.pig
从第8个字符开始提取
原文件 usercount.pig
grunt> A = load '/data/20160518/1055/100/9_1463541300000/part-00000' using PigStorage('|');
grunt> B = foreach A generate $16 as ip;
grunt> C = group B by ip;
grunt> D = foreach C generate group,COUNT(B);
grunt> dump D;
处理后结果
A = load '/data/20160518/1055/100/9_1463541300000/part-00000' using PigStorage('|');
B = foreach A generate $16 as ip;
C = group B by ip;
D = foreach C generate group,COUNT(B);
去除标题,并替换分隔符
cut -f 1- -s --output-delimiter='|' table.txt
- 由于默认分割符是 \t, 所以不需指定
- -s 去除不含分隔符的行(通常是标题,空行)
- 指定输出分割符
原文件,cat table.txt
table
1 xiaohu
2 xiaoli
3 xiaowang
4 xiaoming
处理结果
1|xiaohu
2|xiaoli
3|xiaowang
4|xiaoming