-
cut命令
cut命令用来操作文件的列,能够视为列编辑器;与之相应是大多数的行“编辑器”。如sed、grep、sort等,它们操作文本时,以行为单位。
cut的主要功能就是输出文本的某一列或几列。对于英文文本,一个字符就占领一列,所以输出几列就是输出几个字符。
主要选项例如以下:-
-c : 指定要输出的列数,能够是单个数字,也能够是如3-5之类的范围。
m@meng:~$ cat new
apple 3
Apple 7
pear 6
pear 4
banana 1
orange 11
m@meng:~$ cut -c 1-6 new
apple
Apple
pear
pear
banana
orange -
-b : 指定每行要输出的字节数。与-c选项基本一样,尤其对英文文本,由于一个英文字母就是一个字节(我认为把英文改成ASCII文本更合适)。
m@meng:~$ cut -b 3 new
p
p
a
a
n
a -
-f : cut更强大的地方在于处理格式化的文本,即每行能够分为几个字段的那种。似乎非常多命令都提供这样的功能,比方sort,可是做的都非常勉强。关键是它们对分隔符的识别太差了。在这方面。awk遥遥率先。
-f选项用来指定输出哪个字段。默认的分隔符是tab。事实上多个空格似乎也能识别。有时间我会专门研究一下分隔符的问题。
m@meng:~$ cut -f 2 new
3
7
6
4
1
11
实际上new文件里名字和数字之间的分隔符并非tab,而cut却正确识别了;然而,这样的情况是不确定的,比方下例:
m@meng:/etc/network$ sudo netstat -apn | sed '3,6 p' -n | cut -f 1
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 2899/sendmail: MTA:
tcp 0 0 127.0.0.1:953 0.0.0.0:* LISTEN 1192/named
tcp 0 0 0.0.0.0:538 0.0.0.0:* LISTEN 1251/gdomap
tcp 0 0 0.0.0.0:445 0.0.0.0:* LISTEN 672/smbd这么明显的分隔都没能识别,源代码怎么写的???
- -d : 指定分隔符。一般配合-f使用。分隔符一般仅仅能指定单个字符。
- -s : 仅输出包括分隔符的行。它会覆盖-f的一些功能,由于仅仅有-f时,会同一时候输出不包括分隔符的行;加上-s选项后,就会删除掉没有包括分隔符的行。
- –output-delimiter=str : 指定输出分隔符为str。
默认与输入分隔符一致。
m@meng:~$ cut --output-delimiter=: -f 1-2 new
apple: 3
Apple: 7
pear: 6
pear: 4
banana: 1
orange: 11
m@meng:~$ cut --output-delimiter=: -c 1-4 new
appl
Appl
pear
pear
bana
oran
显然,这个选项仅仅对不同字段之间有效。。。
-
-
uniq命令
能够检測出文本中反复的行,相似与sort中-u选项。-
-d : 仅仅显示那些反复的行。
m@meng:~$ cat new
apple 3
apple 3
Apple 7
pear 6
pear 4
banana 1
orange 11
m@meng:~$ uniq -d new
apple 3 -
-c,–count : 在每行前面显示反复次数。
m@meng:~$ uniq -c new
2 apple 3
1 Apple 7
1 pear 6
1 pear 4
1 banana 1
1 orange 11 -i : 忽略大写和小写。
- -u : 仅输出不反复的行。
m@meng:~$ uniq -u new
Apple 7
pear 6
pear 4
banana 1
orange 11
基本的就是这几个选项了。其它的比方-s、-f等,试了几次无论用。
-