shell学习笔记之uniq、join、cut

uniq

uniq用来从一个文本文件中删除或者禁止重复行,一般uniq假定文件已经分类,并且结果正确。

sort中的唯一性选项去除所有重复行,而uniq命令并不是这样。在uniq中,重复行是不断重复出现的行,中间不夹杂任何文本内容,如:

1 May Day
2 May Day
3 May Day
4 Going DOwn
5 May Day
6 May Day.
7 May Day

uniq将前三行看作是重复行,第四行是不同文本,所以第五行的May Day将被保留。uniq命令的格式为:

$ uniq -u d c -f input_file out_file

各个选项的含义:

-u : 只显示不重复行

-d : 只显示有重复数据行,每种重复行只显示其中一行

-c : 打印每个重复行出现的次数

-f : n为数字,前n个域被忽略,有些系统并不识别-f,这时替代使用-n。

 

使用-n只测试一行一部分的唯一性。注意:域从1开始计数。

1 AK123 33 46 6u OPP ty yu
2 DK122 5h 67 y8 OPP ty yu
3 EK999 56 56 78 IIY ty yu

从第五个域开始比较:

1 $ uniq -f4 -c parts.txt 
2 2 AK123 33 46 6u OPP ty yu
3 1 EK999 56 56 78 IIY ty yu

uniq在读取行时,会对它们进行比较并将只除去两个或更多的连续行。


join

join用来将两个分类文本文件的行连在一起。假设有两个文件file1和file2,当然已经分类,每个文件中都有一些元素与另一个文件相连,由于这种关系,join将两个文件合并在一起。

为了有效使用join,需分别将输入文件分类。

其命令格式为:

1 join [options] input-file1 input-file2

选项:

an : 表示连接时显示第n个文件不匹配行。
o n.m : n表示文件号,m表示域号。

t : 分隔符

j n.m o.p 表示连接的字段参数。

缺省j o i n删除或去除连接键的第二次重复出现,这里即为名字域。

 

cut

cut用来从标准输入或者文本文件中剪切列或者域。剪切文本可以粘帖到一个文本文件中。

格式为:

1 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域

 

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格式为;

1 paste -d -s -file1 file2

选项含义如下:
-d 指定不同于空格或t a b键的域分隔符。例如用@分隔域,使用- d @。
-s 将每个文件合并成行而不是按行粘贴。
- 使用标准输入。例如ls -l |paste ,意即只在一列上显示输出。

 

split

split将大文件分割成小文件。

命令格式:

1 split -output_file-size input-filename output-filename



posted @ 2012-03-02 13:56  leealways87  阅读(852)  评论(0编辑  收藏  举报