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