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

原创 2013年12月02日 23:19:46

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编程指南第十一章------------合并与分割

有几种工具用来处理文本文件分类、合并和分割操作,本章详细介绍这些工具。 本章内容有: • 实用的分类(s o r t)操作。 • uniq。 • join。 • cut。 • paste。 • spl...
  • huang2009303513
  • huang2009303513
  • 2013年11月30日 10:10
  • 1240

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

j o i n用来将来自两个分类文本文件的行连在一起。如果学过S Q L语言,可能会很熟悉j o i n 命令。 下面讲述j o i n工作方式。这里有两个文件f i l e 1和f i l e 2,...
  • huang2009303513
  • huang2009303513
  • 2013年11月30日 15:46
  • 1186

《C++ Primer Plus(第六版)》(20)(第十一章 使用类 编程题答案1)

这章主要讲重载运算符,友元函数和类型转换。 1. 第一题就困了我好久,怎么都访问不了私有成员,一开始以为是哪里写错了,对着书敲代码都不行。 后来又觉得会不会友元的重载运算符太复杂,就自己写个简单的友元...
  • u012175089
  • u012175089
  • 2016年12月22日 10:12
  • 2330

C++Primer第五版 第十一章习题答案(1~10)

1:知识点1:关联容器与顺序容器有着根本的不同 知识点2:关联容器的元素是按关键词来保存和访问的,顺序容器是按他们在容器中的位置来顺序访问 知识点3:关键词在关联容器中起到重要的作用,map中的元素是...
  • misayaaaaa
  • misayaaaaa
  • 2017年03月01日 09:31
  • 1817

java语言程序设计基础篇第十一章编程练习题

1package yongheng; import java.util.Scanner;public class Main { public static void main(String a...
  • gyhguoge01234
  • gyhguoge01234
  • 2016年09月08日 22:19
  • 2230

C++ Primer Plus第六版 第十一章 编程练习答案

//第一题 //windows下\r\n在txt中是换行...被坑了= = //vector.h #ifndef VECTOR_H_ #define VECTOR_H_ #include name...
  • zhaoshu01234
  • zhaoshu01234
  • 2015年09月26日 10:54
  • 1766

《Python核心编程》第11章 习题

11-2 函数。结合你对练习5-2的解,以便你创建一个带一对相同数字并同时返回它们之和以及产物的结合函数。 fun=lambda x,y:x+y print fun(1,3) 11-3 函数...
  • birdzb
  • birdzb
  • 2016年01月22日 16:15
  • 2880

LINUX与UNIX Shell编程指南

本文来自于哥们对《LINUX与UNIX Shell编程指南》一书的写写画画,并合成了自己当初一些疑问点所致,仅限学习使用,同时向原作者致敬。 原书请见 http://product.chin...
  • bravezhe
  • bravezhe
  • 2013年10月31日 13:16
  • 3662

算法导论第十一章----11.2.1-11.2.5

11.2-1& 随机变量Xij表示i,j哈希值相同 11.2-3 search(successful or unsuccessful): Θ(1+α/2) insert: Θ(1+...
  • lihenair
  • lihenair
  • 2014年02月27日 20:05
  • 4727

第十一章上机练习

--查询每个年级的总学时数,并按照升序排列。 SELECT GradeId AS 年级,sum(ClassHour) as 总学时数 FROM [MySchool].[dbo].[Subject] g...
  • qq_36074180
  • qq_36074180
  • 2016年11月25日 17:23
  • 105
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:linux shell编程指南第十一章------------合并与分割2
举报原因:
原因补充:

(最多只允许输入30个字)