西北风的专栏

做一个有价值的程序猿

linux shell编程指南第十一章------------合并与分割2

cut用法:

c u t用来从标准输入或文本文件中剪切列或域。剪切文本可以将之粘贴到一个文本文件。

下一节将介绍粘贴用法。
c u t一般格式为:
cut [options] file1 file2
下面介绍其可用选项:
-c list 指定剪切字符数。
-f field 指定剪切域数。
-d 指定与空格和t a b键不同的域分隔符。
- c用来指定剪切范围,如下所示:
- c 1,5-7 剪切第1个字符,然后是第5到第7个字符。
-c1-50 剪切前5 0个字符。
-f 格式与- c相同。
-f 1,5 剪切第1域,第5域。
- f 1,10-12 剪切第1域,第1 0域到第1 2域。

参照上一节中的文件‘ p e r s’,现在从' p e r s '文件中剪切文本。使用冒号做其域分隔符。

[root@localhost huangcd]# cat pers
P.Jones:Office Runner:ID897
S.Round:UNIX admin:ID666
L.Clip:Presonl Chief:ID982
[root@localhost huangcd]# cat pers2
Dept2C   ID897   6  years
Dept3S   ID666   2  years

Dept5Z   ID982   1  year

使用域分隔符:

文件中使用冒号“:”为域分隔符,故可用- d选项指定冒号,如- d:。如果有意观察第3域,
可以使用- f 3。要抽取I D域。可使用命令如下:

[root@localhost huangcd]# cut -d : -f 3 pers 
ID897
ID666
ID982

c u t命令中剪切各域需用逗号分隔,如剪切域1和3,即名字和I D号,可以使用:

[root@localhost huangcd]# cut -d : -f 1,3 pers 
P.Jones:ID897
S.Round:ID666
L.Clip:ID982

要从文件/ e t c / p a s s w d中剪切注册名及缺省根目录,需抽取域1和域3:

[root@localhost huangcd]# cut -d : -f1,6 /etc/passwd|head -5
root:/root
bin:/bin
daemon:/sbin
adm:/var/adm
lp:/var/spool/lpd

使用- c选项指定精确剪切数目。这种方法需确切知道开始及结束字符。通常我不用这种方
法,除非在固定长度的域或文件名上。
当信息文件传送到本机时,查看部分文件名就可以识别文件来源。要得到这条信息需抽
取文件名后三个字符。然后才决定将之存在哪个目录下。下面的例子显示文件名列表及相应
c u t命令:

[root@localhost huangcd]# cat xxx
2231DG
2232DP
3336DK
[root@localhost huangcd]# cat xxx|cut -c 4-6
1DG
2DP
6DK

要剪切字符,须计算ls -l列表中的字符数。如显示权限用cut -c1-10。然而这种方法可能
相当慢,因此需要使用其他工具将相应信息抽取出来。要剪切谁正在使用系统的用户信息,
方法如下:

[root@localhost huangcd]# who -u
root     :0           2013-12-02 22:53   ?          4564
root     pts/1        2013-12-02 22:56   .          4859 (:0.0)
[root@localhost huangcd]# who -u|cut -c 1-8
root    
root    

paste用法:

c u t用来从文本文件或标准输出中抽取数据列或者域,然后再用p a s t e可以将这些数据粘贴
起来形成相关文件。粘贴两个不同来源的数据时,首先需将其分类,并确保两个文件行数相
同。
p a s t e将按行将不同文件行信息放在一行。缺省情况下, p a s t e连接时,用空格或t a b键分隔
新行中不同文本,除非指定- d选项,它将成为域分隔符。
p a s t e格式为;
paste -d -s -file1 file2
选项含义如下:
-d 指定不同于空格或t a b键的域分隔符。例如用@分隔域,使用- d @。
-s 将每个文件合并成行而不是按行粘贴。
- 使用标准输入。例如ls -l |paste ,意即只在一列上显示输出。

从前面的剪切中取得下述两个文件:

[root@localhost huangcd]# cat pas1
ID897
ID666
ID892
[root@localhost huangcd]# cat pas2
P.Jones
S.Round
L.Clip

基本p a s t e命令将之粘贴成两列:

[root@localhost huangcd]# paste pas1 pas2
ID897   P.Jones
ID666   S.Round
ID892   L.Clip

要创建不同于空格或t a b键的域分隔符,使用- d选项。下面的例子用冒号做域分隔符。

[root@localhost huangcd]# paste -d : pas2 pas1
P.Jones:ID897
S.Round:ID666
L.Clip:ID892

要合并两行,而不是按行粘贴,可以使用- s选项。下面的例子中,第一行粘贴为名字,第
二行是I D号。

[root@localhost huangcd]# paste -s pas2 pas1
P.Jones S.Round L.Clip
ID897   ID666   ID892

paste命令管道输入:

p a s t e命令还有一个很有用的选项( -)。意即对每一个( -),从标准输入中读一次数据。
使用空格作域分隔符,以一个4列格式显示目录列表。方法如下:

[root@localhost huangcd]# ls
addaccount.sh      files.out      nltk-2.0.4          quote.txt
append.sed         filetest       nltk-2.0.4.tar.gz   sedex.txt
c                  find.dt        nohup.out           sed.out
change.sed         grade.txt      pas1                sort.out
data.f             grep.err       pas2                today
delete_me_and_die  huangcdcron    pers                var_text.sh
Desktop            ipython-0.8.2  python              vmware-tools-distrib
dht                mix.sed        PyYAML-3.10         who.out
file1              myfile1.txt    PyYAML-3.10.tar.gz  wow
filedt             myfile.txt     qrt.tmp             xxx
[root@localhost huangcd]# ls | paste -d " " - - - -
addaccount.sh append.sed c change.sed
data.f delete_me_and_die Desktop dht
file1 filedt files.out filetest
find.dt grade.txt grep.err huangcdcron
ipython-0.8.2 mix.sed myfile1.txt myfile.txt
nltk-2.0.4 nltk-2.0.4.tar.gz nohup.out pas1
pas2 pers python PyYAML-3.10
PyYAML-3.10.tar.gz qrt.tmp quote.txt sedex.txt
sed.out sort.out today var_text.sh
vmware-tools-distrib who.out wow xxx

[root@localhost huangcd]# ls|paste -d ":" - - - -|head -5
addaccount.sh:a.out:append.sed:apue.h
arraytest.awk:audit.check:audit.log:audit_run
backup_etc.bz2:c:caseterm:change.sed
cleanup:cleanup1:data:data.f
davecron:delete_me_and_die:Desktop:dht

split用法:

s p l i t用来将大文件分割成小文件。有时文件越来越大,传送这些文件时,首先将其分割可
能更容易。使用v i或其他工具诸如s o r t时,如果文件对于工作缓冲区太大,也会存在一些问题。
因此有时没有选择余地,必须将文件分割成小的碎片。
s p l i t命令一般格式:
split -output_file-size input-filename output-filename
这里o u t p u t - f i l e - s i z e指的是文本文件被分割的行数。s p l i t查看文件时,o u t p u t - f i l e - s i z e选项
指定将文件按每个最多1 0 0 0行分割。如果有个文件有2 8 0 0行,那么将分割成3个文件,分别有
1 0 0 0、1 0 0 0、8 0 0行。每个文件格式为x [ a a ]到x [ z z ],x为文件名首字母, [ a a ]、[ z z ]为文件名剩
余部分顺序字符组合,下面的例子解释这一点。

[root@localhost huangcd]# cat split1 
this is line1
this is line2
this is line3
this is line4
this is line5
this is line6

按每个文件2行分割,命令为:
[root@localhost huangcd]# split -2 split1 

观察其结果。
[root@localhost huangcd]# ls -lt |head
总计 1508
-rw-r--r-- 1 root    root        28 12-02 23:18 xaa
-rw-r--r-- 1 root    root        28 12-02 23:18 xab
-rw-r--r-- 1 root    root        28 12-02 23:18 xac
-rw-r--r-- 1 root    root        84 12-02 23:17 split1

文件有6行,s p l i t按每个文件两行进行了分割,并按字母顺序命名文件。为进一步确信操
作成功,观察一个新文件内容:

[root@localhost huangcd]# cat xac
this is line5
this is line6




阅读更多
个人分类: linux shell
想对作者说点什么? 我来说一句

linux shell并与分割

2008年01月12日 554KB 下载

linux shell编程指南

2011年05月22日 19.59MB 下载

LINUX与UNIX Shell编程指南

2011年04月01日 4MB 下载

LINUX与UNIX SHELL编程指南

2009年10月09日 17.04MB 下载

LINUX与UNIX SHELL编程指南.part1

2011年05月17日 9.54MB 下载

Linux与UNIX的Shell编程指南

2010年06月04日 17.03MB 下载

没有更多推荐了,返回首页

不良信息举报

linux shell编程指南第十一章------------合并与分割2

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭