sort,uniq,join,cut,paste,split-文件分类合并和分割(持续更新)

linux-shell-sort,uniq,join,cut,paste,split-文件分类合并和分割
转自[url]http://hi.baidu.com/yuhfurrudzkmuve/item/2af7801015b9bf0e8fbde4c9[/url]
sort

排序
-c 测试文件是否已经分类。
-m 合并两个分类文件。
-u 删除所有复制行。
-o 存储sort结果的输出文件名
-b 使用域进行分类时,忽略第一个空格。
-n 指定分类是域上的数字分类。
-t 域分隔符;用非空格或t a b键分隔域。
-r 对分类次序或比较求逆。
+n n为域号。使用此域号开始分类。
n n为域号。在分类比较时忽略此域,一般与+ n一起使用。
post1 传递到m,n。m为域号,n为开始分类字符数;例如4,6意即以第5域分类,从第7个字符开始

反序
sort -t: -r video.txt

去除重复行
sort -u video.txt

同时处理多个文件
cat file1 file2 file3 | sort > outfile
sort -m file1 file2 file3 > outfile


1、sort特点:当查阅注册文件或为另一用户对下载文件重排文本列时方便。

2、sort选项:
sort命令一般格式:
sort -cmu -o output_file [other options] +pos1 +pos2 input_files

sort的参数:
-c 测试文件是否已经分类。
-m 合并两个分类文件。
-u 删除所有复制行。
-o 存储sort结果的输出文件名。
-b 使用域进行分类时,忽略第一个空格。
-n 指定分类是域上的数字分类。
-t 域分隔符;用非空格或t a b键分隔域。
-r 对分类次序或比较求逆。
+n n为域号。使用此域号开始分类。
n n为域号。在分类比较时忽略此域,一般与+n一起使用。
post1 传递到m,n。m为域号,n为开始分类字符数;

3、保存输出
1)-o选项保存分类结果
2)重定向方法

4、sort启动方式
sort执行时,先查看是否为域分隔设置了-t选项,如果设置了,则使用它来将记录分隔成域0、域1等等;
如果未设置,用空格代替。缺省时sort将整个行排序.

5、sort对域的参照方式
注意:这里说的域和前面AWK一样是列的意思。
注意:第一个域作为域0,域1是第二个域

6、文件是否已分类
使用sort -c filename 查看

7、sort分类求逆
逆向sort结果,使用- r选项

8、按指定域分类
$sort -t: t1 video.txt
按第2域进行分类。

9、数值域分类
用- n选项
$sot -t: t3n video.txt
注意:数值域(即是数字格式的),即为数值分类

10、唯一性分类
- u选项进行唯一性
$sot -u video.txt

11、使用k的其他sort方法
其他选项也可以使用k,主要用于指定分类域开始的字符数目
$sort -t: -k4 video.txt
使用k做分类键排序
先以第4域,再以第1域分类,命令为-k4 -k1,
$sort -t: -r -k4 -k1 video.txt

12、指定sort序列
sort +0 -2 +3
该命令意即开始以域0分类,忽略域2,然后再使用域3分

13、pos用法
指定开始分类的域位置,另外一种方法:
sort +field_number .characters_in
意即从ield_number开始分类,但是要在此域的第characters_in个字符开始。
$sort -t: +1.2 video.txt
+1.2,意即以第1域最左边第3个字符开始分类.

14、使用head和tail将输出分类
显示部分结果的作用
$sort -t: -r -K4 video.txt | head -1
只显示一行。
$sort -t: -r -K4 video.txt | tail -1
只显示最后一行。
使用head或tail时想省略显示行数,缺省时显示10行
$head -20 filename
显示前20行。
$tail -6 filname
显示后6行。

15、awk使用sort输出结果
可以为输出的结果加上一些头和尾等信息。

16、将两个分类文件合并
格式:sort -m sorted_file1 sorted_file2
使用-m +o。将这个文件并入已存在的分类文件

17、系统sort
sort可以用来对/etc/passwd文件中用户名进行分类
以第1域即注册用户名分类,然后管道输出结果到awk,awk打印第一域。
$sort /etc/passwd | sort -t: +0 | awk -F":" '{print $1}'

用于d f命令,以递减顺序打印使用列
$df | sort -b -r +4
用- b选项,忽略分类域前面的空格
域4(+ 4),即容量列将分类求逆

排序IP,分隔点是.
$sort -t. +3n iplist


uniq

uniq用来从一个文本文件中去除或禁止重复行
uniq里意即持续不断重复出现的行,中间不夹杂任何其他文本
注意:和前面的sort -u 不同。

格式:
uniq [选项] inputfile outputfile

选项:
-u 只显示不重复行。
-d 只显示有重复数据行,每种重复行只显示其中一行
-c 打印每一重复行出现次数。
-f n为数字,前n个域被忽略。
一些系统不识别- f选项,这时替代使用- n。


join

(类似SQL中的Join)
join用来将来自两个分类文本文件的行连在一起

格式:
join [optinos] inputfile1 inputfile2

an n 为一数字,用于连接时从文件n中显示不匹配行。
o n.m n为文件号,m为域号。1. 3表示只显示文件1第三域,每个n,m必须用逗号分隔,如1 . 3,2 . 1。
j n m n为文件号,m为域号。使用其他域做连接域。
t 域分隔符。用来设置非空格或t a b键的域分隔符。

1) 不匹配连接
$join -a1 file1 file2

2)选择性连接
使用- o选项选择连接域
$join -o 1.1,2.2 file1 file2

使用-jn m进行其他域连接,例如用文件1域3和文件域2做连接键
join -j1 3 -j2 2 file1 file2


cut

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

cut一般格式为:
cut [options] file1 file2

可用选项:
-c list 指定剪切字符数。
-f field 指定剪切域数。
-d 指定与空格和tab键不同的域分隔符。
-c 用来指定剪切范围,如下所示:-c1,5-7 剪切第1个字符,然后是第5到第7个字符。
-f 格式与- c相同,剪的是域。即列
-f 1,5 剪切第1域,第5域。
-f 1,10-12 剪切第1域,第1 0域到第1 2域。

1)使用域分隔符
$cut -d: -f3 file

2)剪切指定域
从文件/etc/passwd中剪切注册名及缺省根目录,需抽取域1和域6:
$cut -d: -f1,6 /etc/passwd


paste

粘贴

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

paste可以将这些数据粘贴起来形成相关文件
粘贴两个不同来源的数据时,首先需将其分类,并确保两个文件行数相同。
缺省情况下, paste连接时,用空格或tab键分隔新行中不同文本,除非指定- d选项

paste格式为;
paste -d -s -file1 file2

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

1)指定列
通过交换文件名即可指定哪一列先粘

2)paste命令管道输入
以一个4列格式显示目录列表,使用空格作域分隔符
$ls /etc | paste -d" " - - - -

3)要合并两行,而不是按行粘贴,可以使用- s选项


split

分割
split -output_file-size input-filename output-filename

split用来将大文件分割成小文件
s p l i t命令一般格式:
split -output_file-size input-filename output-filename
-output_file-size指的是文本文件被分割的行数
最多1000行分割
每个文件格式为x [aa]到x[zz],x为文件名首字母[可以自己定], [aa]、[zz]为文件名剩余部分顺序字符组合。
后面是按aa ab ac 这样的顺序来的。


head,tail

头 10 行发送至标准输出
尾 10 行发送至标准输出


tac

逆序排序文件
tac 由 cat 逆序拼写而成

ls -l |tail | tac
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值