13 November 2013

用bash输出特定的行似乎比较简单,毕竟行处理就算是编程也比较轻松,但是说到列处理就要恼火的多了,今天就来介绍一个列处理的神奇工具——cut。

随便先写一个文件,就命名为test吧,随便写点东西进去,我的test如下:

1	test	hello
2	okkk	what
3	shit	here

还不错,我们输入:

cut -f1,2 hello

这个命令会输出文件的第一列和第二列。什么,你的输出是文件的所有内容?Sorry,这里忘了说了,一定要以制表符为定界符,也就是说用tab来分割列,而不要用空格或其他的。如果你重新试验就会发现能够输出第一列和第二列了。

有时候我们会遇到这样的情况,我们的test是这样的:

1	test	hello
2	okkk	what
3	mm   llll

也就是说一个制表符无法使列对齐,可能要输入两个或更多。如果输入两个制表符,你会发现使用cut打印出的第三列第三行上的内容是空白,所以即使对不齐也要以一个制表符为定界符。

其实上面的cut命令很简单,就是在-f后面(也可以在-f后面加一个空格)加上想要打印出的列,多个列用逗号隔开即可。如果文件的定界符不是制表符,而是逗号啊,分号啊这些,我们可以使用如下命令:

cut -f2 -d";" test

-d后面加上自己想要的定界符即可。cut还不仅可以分割列,还可以分割字符和字节。

cut -c2-4 test
cut -b2-4 test

-c是按字符分割,-b是按字节分割。那么要说说-f、-c和-b后面的数字,这些数字除了逗号分割外,还可以还可以-M、N-或N-M,分别代表从第一个字符字节或字段到第M个、第N个字符字节或字段到最后一个和从第N个字节字符或字段到第M个(包含第M个)。上例就是第2到4个字节或字符。

当然,cut还有其他用法,在此仅仅介绍常用的几个,其他的就等待大家继续去摸索吧。



blog comments powered by Disqus