linux从入门到精通读薄(五)cut和paste

5-3 简单的数据处理

5-3-1 cut和paste

sed和tr在处理文件的行时非常有用,而cut命令提供了提取特定列的简单方法:

$ cut -d: -f1 pw.test
root
pc
carey
mot
grex

(-d指明字段分隔符为“:”
(-f1)指提取第一字段

[例]
提取pw.test的登录名和目录,将它们分别放在不同的文件/tmp/p1和/tmp/p6中:

$ cut -d: -f1 pw.test >/tmp/p1
$ cut -d: -f6 pw.test >/tmp/p6

可以用paste命令将两个文件中的信息合成一个表:

$ paste /tmp/p1 /tmp/p6
root        /root/
pc        /usr1/pc
carrey        /usr1/carey
mot        /usr1/mot
grex        /usr1/mot

paste将在字段之间自动插入分隔符,默认为Tab(ctrl-i),但你可以用-d开关来自定义。

[例子]
从date命令输出的日期和时间中提取分钟数

不带参数的date命令将用固定格式显示日期和时间:

$ date
Sun        Jun         4        17:27:23        BST        2003

问题在于日期字段4,它小于10,系统在它前面加了空格来保持字段的正确长度。如果告诉cut命令用空格作为字段分隔符,多出的空格将被看作一个额外的字段。

解决的办法是先用tr命令将多个空格压缩为一个空格:

$ date | tr -s " "
Sun Jun 4 17:27:23 BST 2003

现在可以用空格作为分隔符来提取时间了:

$ date | tr -s " " | cut -d" " -f4
17:27:23

可以继续提取分钟数:

$ date | tr -s " " | cut -d" " -f4 | cut -d: -f2
27

还有一种更简单的办法,使用-b开关来切出需要的字段:

$ date |cut -b15-16
27

(待续)