cut命令和paste命令

2011年1月19日 由 edsionte 留言 »
cut命令

顾名思义,cut命令就是从文本文件或从某个命令的输出数据中裁剪(析取)出想要的数据域。cut命令一般使用的方式为:

cut -cchars file

其中,-cchar中的-c为cut命令的常用选项,表示从file文件的每一行中都cut出chars这段文字。。chars的取值较为灵活,分为以下几种情况。

cut -c5 file:析取file文件每行的第5个字符;

cut -c5,7 file:析取file文件每行第5和第7个字符;

cut -c6-8 file:析取file文件每行第6到第8个字符;

cut -c6- file:析取file文件每行第6个到行尾之间的字符;

cut -c-3 file:析取file文件每行行首到第三个字符之间的字符;

如果cut命令中未指定file,则将标准输入作为cut命令的析取对象。比如:

edsionte@edsionte-desktop:~$ ls -l
总用量 1680
drwx------  2 edsionte edsionte   4096 2011-01-10 20:38 android_code
-rwxrwxrwx  1 edsionte edsionte   7138 2011-01-13 08:42 a.out
drwxr-xr-x  2 edsionte edsionte   4096 2011-01-16 21:46 assembly
drwxr-xr-x  2 edsionte edsionte   4096 2011-01-11 09:58 bin
drwx------ 24 edsionte edsionte   4096 2011-01-17 11:35 code
edsionte@edsionte-desktop:~$ ls -l | cut -c1-9
总用量
drwx-----
-rwxrwxrw
drwxr-xr-
drwxr-xr-
drwx-----

上述cut命令中,将ls命令的输出作为cut命令的输入。产生的结果是析取出每列数据的第1到第9个字符,也既是每个文件的访问权限。下面的例子通过逗号隔开两个数值列表,分别析取出文件访问权限和文件名。

edsionte@edsionte-desktop:~$ ls -l
总用量 1680
drwx------  2 edsionte edsionte   4096 2011-01-10 20:38 android_code
-rwxrwxrwx  1 edsionte edsionte   7138 2011-01-13 08:42 a.out
drwxr-xr-x  2 edsionte edsionte   4096 2011-01-16 21:46 assembly
drwxr-xr-x  2 edsionte edsionte   4096 2011-01-11 09:58 bin
drwx------ 24 edsionte edsionte   4096 2011-01-17 11:35 code
edsionte@edsionte-desktop:~$ ls -l | cut -c1-9,56-
总用量
drwx----- android_code
-rwxrwxrw a.out
drwxr-xr- assembly
drwxr-xr- bin
drwx----- code

-d和-f选项

通过上述的例子可以看到,如果单纯使用-c选项,则必须很清楚所要解析字符在每行中的位置;另外,-c选项适用从格式固定的文件或命令输出中解析出所需要的字符。如果文件数据的组织格式不固定,则很难使用-c选项从每行中都解析出所需的字符。

比如我们常常会遇到这样的个人信息,包含姓名,性别,城市,爱好,电话:

edsionte:male:xian:music:18717375182
zhyun:famle:beijing:basketball:18654737473
liting:male:zhangjiajie:tableball:15784859345

现在如果要解析出姓名,使用-c选项则不可能做到。不过该文件有一个特点,每行信息中的每个字段都使用分号隔开,此时我们就可以使用-f和-d选项:

cut -ddchar -ffields file

dchar表示我们析取字段时所依据的分隔符;fields标示我们所要析取的字段序号,可用逗号隔开多个字段序号。对于上面的例子,我们可以这么做:

edsionte@edsionte-laptop:~/shelltest$ cut -d: -f1 info
edsionte
zhyun
liting

cut命令将制表符(\t)作为默认的字段分隔符,如果某个文件用制表符作为每行各个字段的分隔符,则使用cut -ffield file即可析取相应字段。

paste命令

与cut命令相反,paste命令可以将多个文件对应行的数据连接在一起,数据之间使用制表符隔开。合并后的结果默认在标准输出中输出。该命令基本使用方法为:

paste files

比如将下面的name和gender合并在一起:

edsionte@edsionte-desktop:~/shelltest$ cat name
edsionte
wangsen
zhanyu
edsionte@edsionte-desktop:~/shelltest$ cat gender
m
m
f
f
m
edsionte@edsionte-desktop:~/shelltest$ paste name gender
edsionte	m
wangsen	m
zhanyu	f
	f
	m

可以看到,由于name文件中只有三行数据,因此gender文件中最后两行和空字符合并在一起。

-d选项

通过-d选项可以指定任意分隔符来隔开不同文件每行的内容,基本使用方法为:

paste -dchars files

dchar可以取多个分隔符,每个分隔符依次隔开files中每个文件每行的数据。比如:

edsionte@edsionte-desktop:~/shelltest$ paste -d~, name gender number
edsionte~m,123
wangsen~m,456
zhanyu~f,789
~f,
~m,

从这个例子也可以看出,name和number文件的第4和第5行的数据均为空。

-s选项

通过这个选项可以将一个文件每行的数据都合并在一起。比如:

edsionte@edsionte-desktop:~/shelltest$ ls
file1  file3  file5  file7  gender  number
file2  file4  file6  file8  name
edsionte@edsionte-desktop:~/shelltest$ ls | paste -s -d@
file1@file2@file3@file4@file5@file6@file7@file8@gender@name@number

对于上述两个命令,使用-d选项时最好将分隔符放在单引号中。原因很简单,比如:

edsionte@edsionte-desktop:~/shelltest$ ls | paste -s -d;
paste:选项需要一个参数 -- d
请尝试执行"paste --help"来获取更多信息。

原因是shell并没有将;作为分隔符,而是认为它是paste命令的结束标志。这里的原因跟转义字符差不多,因为此时我们需要使用;的本意。加上单引号即可成功执行上述命令:

edsionte@edsionte-desktop:~/shelltest$ ls | paste -s -d';'
file1;file2;file3;file4;file5;file6;file7;file8;gender;name;number
广告位

发表回复

windows 7 ultimate product key

windows 7 ultimate product key

winrar download free

winrar download free

winzip registration code

winzip registration code

winzip free download

winzip free download

winzip activation code

winzip activation code

windows 7 key generator

windows 7 key generator

winzip freeware

winzip freeware

winzip free download full version

winzip free download full version

free winrar download

free winrar download

free winrar

free winrar

windows 7 crack

windows 7 crack

windows xp product key

windows xp product key

windows 7 activation crack

windows7 activation crack

free winzip

free winzip

winrar free download

winrar free download

winrar free

winrar free

download winrar free

download winrar free

windows 7 product key

windows 7 product key