从输入行中选取字符或者字段
cut [options] [file-list]
cut 从输入行中选取字符或者字段,并将他们写到标准输出,字符和字段从1开始编号
参数
file-list 是文件的路径名列表,如果没有指定参数,或者使用连字符(-)来代替文件名,那么cut将从标准输入来获取输入
选项
-c clist 选取由clist中的列号指定的字符。clist的值为列号(多个值用逗号分隔)或者列范围,列范围用两个列号指定,
中间用连字符隔开。范围-n表示从第1~n列。n-表示从第n列到行尾。n-m表示从第n~m列
-d dchar 将dchar作为输入字段的分割符,默认分隔符为制表符,特殊情况下可使用转义字符
-f flist 选择在flist中指定的字段。flist的值为字段号(多个值用逗号分隔)或者字段的范围。字段范围可以用两个字段号指定,
中间用连字符隔开。范围-n表示从第1~n个字段,范围n-表示从第n个字段到行尾,n-m表示从第n~m个字段。默认字
段的分隔符为制表符,也可以使用-d选项来指定分割符
-s 仅打印包含分割符的行,如果没有此选项,则打印不包含分割符的行
示例
先看看原文件
$ cat a.txt
1111 2222 3333 4444 5555
1111 2222 3333 4444 5555
1111 2222 3333 4444 5555
1111 2222 3333 4444 5555
------------------------
cut -c 列范围
$ cut -c1-4 a.txt
1111
1111
1111
1111
----
指定列范围打印字符
cut -c 列号
$ cut -c1,6 a.txt
12
12
12
12
--
指定列号打印字符
cut -d -f
$ cut -d' ' -f1-3 a.txt
1111 2222 3333
1111 2222 3333
1111 2222 3333
1111 2222 3333
------------------------
指定分隔符和字段范围打印字符,此处文本文件中默认以space作为分隔符,最底下没有分隔符,所以全部打印
还可用cut -d -fn,n指定字段号
cut -s -d -f
$ cut -s -d' ' -f1-3 a.txt
1111 2222 3333
1111 2222 3333
1111 2222 3333
1111 2222 3333
使用-s选项打印包含分隔符的行,最末行没有分隔符,所以不打印
Tips
虽然cut在功能上有所限制,但是它能较快的分割列和字段,有时能与paste配合使用