40-cut 简明笔记

时间:2021-10-04 12:40:34

从输入行中选取字符或者字段

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配合使用