七、文件的排序、合并和分割
2021-03-02 04:29
标签:header 读取文件 反选 分割 container 逆向 文件名 保存到文件 ctrl+h sort命令、uniq命令、join命令、cut命令、paste命令、split命令、tr命令和tar命令,能够实现对文件记录排序、统计、合并、提取、粘贴、分隔、过滤、压缩和解压等功能。 定义 sort命令将输入文件看做由多条记录组成的数据流,而记录由可变宽度的字段组成,以换行符作为定界符。 说明 语法 sort命令选项及其意义 sort命令的用法 -t选项 sort命令分域对文件进行排序,默认的域分隔符是空格符,-t选项可用于设置分隔符。 -k选项 -k选项指定排序的域。 sort命令以1表示第1域、以2表示第2域,依次类推。 -n选项 -n选项可以指定根据数字大小进行排序 -r选项 -r选项用于将排序结果逆向显示 -u选项 -u选项用于去除排序结果中的重复行 -o选项 sort命令默认将排序后的结果输出到屏幕上 -c选项 -c选项用于测试文件是否已经排好序 -m选项 -m选项用于将两个排好序的文件合并成一个排好序的文件 在文件合并前,他们必须已经排好序 uniq命令用于去除文本文件中的重复行。 uniq命令选线及其意义 语法 join命令用于实现两个文件中记录的连接操作,即连接操作将两个文件中具有相同域的记录选择出来,再将这些记录所有的域放到一行(包含来自两个文件的所有域); join命令在对两个文件进行连接时,两个文件必须都是按照连接域排好序的,按其他域排序无效。 语法 join命令选项及其意义 说明 -a和-v选项的区别在于 -a选项显示以共同域进行连接的结果,而-v选项则不显示这些记录 join命令的结果默认不显示未进行连接的记录,即默认显示连接记录在两个文件中的所有域,而且是按顺序来显示的。 -o选项用于改变结果显示的格式,可指定显示哪几个域、按什么顺序显示这些域 join命令默认比较文件1和文件2的第1域,当需要通过其他域进行连接,可使用-1和-2选项,-1用于设置文件1用于连接的域,-2用于设置文件2用于连接的域 定义 cut命令用于从标准输入或文本文件中按域或行提取文本 语法 cut命令选项及其意义 示例 说明 cut命令灵活提取文本文件中的内容,它默认将提取的内容放到标准输出上,如果要将提取的内容保存到文件,可以使用文件重定向来实现。 定义 paste命令用于将文本文件或标准输出中的内容粘贴到新的文件,它可以将来自不同文件的数据粘贴到一起,形成新的文件。 语法 paste命令选项及其意义 说明 paste命令不同于sort、join和cut命令改变域分隔符都是为了按域读取文件内容,paste命令改变域分隔符是用于设置输出文件的格式。 示例 定义 split命令用于将大文件切割成小文件,split命令可以按照文件的行数、字节数切割文件,并能在输出的多个小文件中自动加上编号 语法 选项及其意义 示例 定义 tr命令实现字符转换功能,其功能类似于sed命令 语法 选项及其意义 说明 示例 tr命令支持正则表达式的一部分以及POSIX字符类 定义 tar命令实现了Linux系统文件的压缩和解压缩 语法 选项及其意义 说明 七、文件的排序、合并和分割 标签:header 读取文件 反选 分割 container 逆向 文件名 保存到文件 ctrl+h 原文地址:https://www.cnblogs.com/nuochengze/p/14417970.html
1 概述
2 sort命令
sort [选项] [输入文件]
选项
意义
-c
测试文件是否已经被排序
-k
指定排序的域
-m
合并两个已排序的文件
-n
根据数字大小进行排序
-o [输出文件]
将输出写到指定的文件,相当于将输出重定向到指定文件
-r
将排序结果逆向显示
-t
改变域分隔符
-u
去除结果中的重复行
sort -t: filename
# -t与":"之间没有空格
# sort命令默认根据第1域对数据记录进行排序,如果第1域相同,再根据第2域排序,以此类推
# 当未指定-t时,分隔符是空格符,这时记录内开头与结尾的空格都将被忽略
# 当用-t选项改变分隔符时,空格符变得有意义
sort -t: -k3 /etc/passwd
# -k和3之间也没有空格
sort -t: -k3n /etc/passwd
# -n选项不单独使用,一般放在域号之后
sort -t: -k3nr /etc/passwd
# 利用-k3n选项将/etc/passwd文件的第3域从小到大排序,然后用-r选项将结果逆向显示
sort -t: -u
sort -t: -k1n -o outfile /etc/passwd
sort -t: c /etc/passwd
sort -t: m filename1 filename2
3 uniq命令
选项
意义
-c
打印每行在文本中重复出现的次数
-d
只显示有重复的记录,每个重复记录只出现一次
-u
只显示没有重复的记录
uniq -c /etc/passwd
4 join命令
join [选项] 文件1 文件2
选项
意义
-a1或-a2
除了显示以共同域进行连接的结果外,-a1表示还显示第1个文件中没有共同域的记录,-a2则表示显示第2个文件中没有共同域的记录
-i
比较域内容时,忽略大小写差异
-o
设置结果显示的格式
-t
改变域分隔符
-v1或-v2
与-a选项类似,但是,不显示以共同域进行连接的结果
-1和-2
-1用于设置文件1用于连接的域,-2用于设置文件2用于连接的域
join -t: -o1.1 2.2 1.2 filename1 filename2
join -t: -i -1 3-2 1 filename1 filename2
# 以文件1的第3域和文件2的第1域进行连接,并忽略大小写
5 cut命令
cut [选项] 文件
选项
意义
-c
指定提取的字符数或字符范围
-f
指定提取的域数或域范围
-d
改变域分隔符
cut -c3 /etc/passwd
cut -c1-5 /etc/passwd
# -c后跟数字表示字符数或字符范围,共3种表示方式
(1) -cn表示第n个字符
(2) -cn,m表示第n个字符和第m个字符
(3) -cn-m表示第n个字符到第m个字符
cut -d: -f1,4 /etc/passwd
# 提取第1,4域
cut -d: -f1-4 /etc/passwd
# 提取第1~4域
6 paste命令
paste [选项] 文件1 文件2
选项
意义
-d
默认域分隔符是空格或tab键,设置新的域分隔符
-s
将每个文件粘贴成一行
-
从标准输入中读取数据
paste -d: filename1 filename2
7 split
split [选项] 待切割的大文件 输出的小文件
选项
意义
-或-l
此两个选项等价,都用于指定切割成小文件的行数
-b
指定切割成小文件的字节
-C
与-b选项类似,但是,切割时尽量维持每行的完整性
# 每2行进行切割,输出文件的以小文件名字开头命名
split -2 /etc/passwd
--说明
- 由于小文件有多个,split命令在小文件名后面自动加上编号以区分不同的小文件,编号为aa~zz
- split命令所切割生成的小文件最多包含1000行记录
# 按每100B切割成小文件
split -b100 /etc/passwd
--说明
- 当split命令不指定小文件的名字时,将自动以x开头、aa~zz为编号对这些小文件进行命名
- split命令-b选项在切割文件时仅考虑了文件大小,未考虑记录的完整性
8 tr命令
tr [选项] 字符串1 字符串2
选项
意义
-c
选定字符串1中字符集的补集,即反选字符串1中的字符集
-d
删除字符串1中出现的所有字符
-s
删除所有重复出现的字符序列,只保留一个
tr -d a-z /passwd
# 删除/etc/passwd中所有的小写字母
tr -d 0-9 /passwd
# 删除/etc/passwd中所有的数字
tr -d "[\n]" /passwd
选项
意义
八进制方式
\a
Ctrl+G 铃声
\007
\b
Ctrl+H 退格符
\010
\f
Ctrl+L 走换行页
\014
\n
Ctrl+J 换行符
\012
\r
Ctrl+M 回车键
\015
\t
Ctrl+I Tab键
\011
# tr -s 能将重复出现的字符串压缩为一个字符
# 空白行可以看做该行只有一个换行符而无其他任何字符
tr -s "[\n]" /passwd
# 将所有重复的字母压缩成一个
tr -s "[a-z],[A-Z]" /passwd
# tr命令加上字符串1和字符串2,将字符串1用字符串2来替换
tr "[a-z]" "[A-Z]" /passwd
tr "[:lower:]" "[:upper:]" /passwd
# 将不在"[a-z][A-Z]"字符集内的字符替换为换行符
# 然后-s选项将重复出现的换行符压缩成一个
tr -cs "[a-z][A-Z]" "[\012*]" /passwd
9 tar命令
tar [选项] 文件名或目录名
选项
意义
-c
创建新的包
-r
为包添加新的文件
-t
列出包内容
-u
更新包中的文件,若包中无此文件,则将该文件添加到包中
-x
解压缩文件
-f
使用压缩文件或设备,该选项通常是必选的
-v
详细报告tar处理文件的信息
-z
用gzip压缩和解压缩文件,若加上此选项创建压缩包,那么解压缩时也需要加上此选项
#gzip -d 能将tar.gz文件还原为.tar文件,gzip -d解压缩压缩文件而得到包
gazip -d db.tar.gz