cut

时间:2021-11-25 14:34:44

cut是一个针对行的数据选取命令

SYNOPSIS

cut [OPTION]... [FILE]...

OPTION

  • -b  以字节为单位进行分割,如果是多字节的话就需要注意了
  • -c  以字符为单位进行分割
  • -d  自定义分割符,默认为制表符
  • -f  显示哪个区域,与-d一起使用
  • -n  表示一个范围,可与-b和-c一起使用
  • -s  表示不包括那些不含分隔符的行

愉快的就开始吧

 [root@iZ288fgkcpkZ cut]# tail - string.txt
冰川里的哈密瓜 职员 北京市 90后已婚小鲜肉
可乐的厨房 互联网 北京市 90后幸福小咖
蛋包饭喵喵 编辑 北京市 90后北京菇凉
爱学习的牛妈 *职业 安徽省 崇尚*的幸福妈咪
四毛的娘亲 全职妈妈 河南省 80后文艺娘亲
[root@iZ288fgkcpkZ cut]#

取出id

[root@iZ288fgkcpkZ cut]# tail - string.txt | cut -b -

[root@iZ288fgkcpkZ cut]# tail - string.txt | cut -b -

[root@iZ288fgkcpkZ cut]# tail - string.txt | cut -b ,,,-

[root@iZ288fgkcpkZ cut]# 

需要说下-n

n  只取出第n个字节/字符/字段

n-  取出第n个字节/字符/字段(包括n)到行尾

-n  取出第一个字节/字符/字段到第n个字节/字符/字段(包括n)

n-m  取出第n个字节/字符/字段(包括n)到第m个字节/字符/字段(包括m)

n,m  取出第n个字节/字符/字段,取出第m个字节/字符/字段

为什么上面最后一个列子并不是按照我写的顺序取出来的?  因为会先将其排序

取出昵称第一个字符

[root@iZ288fgkcpkZ cut]# tail - string.txt | cut -b ,,





[root@iZ288fgkcpkZ cut]# tail - string.txt | cut -b ,,





[root@iZ288fgkcpkZ cut]# tail - string.txt | cut -c





[root@iZ288fgkcpkZ cut]#

取出整个昵称呢?

[root@iZ288fgkcpkZ cut]# tail - string.txt |cut -f
冰川里的哈密瓜
可乐的厨房
蛋包饭喵喵
爱学习的牛妈
四毛的娘亲
[root@iZ288fgkcpkZ cut]# tail - string.txt| sed 's/\t/\s/g' |cut -d \s -f
冰川里的哈密瓜
可乐的厨房
蛋包饭喵喵
爱学习的牛妈
四毛的娘亲
[root@iZ288fgkcpkZ cut]#

如果指定了分割符,但是文本中有不包含分割符的行呢?

修改文本

[root@iZ288fgkcpkZ cut]# tail - string.txt
可乐的厨房 互联网 北京市 90后幸福小咖
蛋包饭喵喵 编辑 北京市 90后北京菇凉
爱学习的牛妈 *职业 安徽省 崇尚*的幸福妈咪
四毛的娘亲 全职妈妈 河南省 80后文艺娘亲
8523728亮晶晶妈全职妈妈广东省70后幸福宝妈1318111438684854
[root@iZ288fgkcpkZ cut]#

还是取出昵称列,用-s可以将不包含分割符的行排除出去

[root@iZ288fgkcpkZ cut]# tail - string.txt| cut -f
可乐的厨房
蛋包饭喵喵
爱学习的牛妈
四毛的娘亲
8523728亮晶晶妈全职妈妈广东省70后幸福宝妈1318111438684854
[root@iZ288fgkcpkZ cut]# tail - string.txt| sed 's/\t/\s/g' |cut -d \s -f
可乐的厨房
蛋包饭喵喵
爱学习的牛妈
四毛的娘亲
8523728亮晶晶妈全职妈妈广东省70后幸福宝妈1318111438684854
[root@iZ288fgkcpkZ cut]# tail - string.txt| sed 's/\t/\s/g' |cut -sd \s -f
可乐的厨房
蛋包饭喵喵
爱学习的牛妈
四毛的娘亲
[root@iZ288fgkcpkZ cut]#

2015-09-21 12:02:28