您的位置:首页 > 运维架构 > Linux

Linux – 文本文件的合并与分割

2018-02-01 20:48 260 查看
有几种工具用来处理文本文件分类,合并和分割操作。

 

sort

sort命令将许多不同的域按不同的列顺序分类。当查阅注册文件或为另一用户对下载文件重排文本列时,sort工具很方便。sort选项很长,甚至有时在各种不同开关的实际功能和结果进行比较时也会遇到麻烦,原因可能是在结合使用sort的不同选项时有些概念模糊不清。

 

sort –cmu –o output_file [other options]+pos1 +pos2 input_files

-c :测试文件是否已经分类

-m :合并两个分类文件

-u :删除所有复制行

-o :存储sort结果的输出文件名

 

其他选项

-b :使用域进行分类时,忽略第一个空格

-n :指定分类时域上的数字分类

-t :域分隔符,用非空格或tab键分隔域

-r :对分类次序或比较求逆

+n :n为域号,使用此域号开始分类

n :n为域号,在分类比较时忽略此域,一般与+n一起使用

post1 :传递到m,n。m为域号,n为开始分类字符数,例如4,6即以第5域分类,从第7个字符开始

 

除了-o可以保存分类结果,也可以使用重定向方法保存:

sort video.txt > results.out

 

sort认为一个空格或一系列空格为分隔符。要加入其他方式分隔,使用-t选项。

sort 参照第一个域作为域0:

 


按指定域分类:sort –t: +1 video.txt 按分类键1分类

 

uniq

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

uniq有点像sort命令中唯一性选择。但是,sort唯一性去除所有重复行,uniq命令并不这样。

比如:

May Day

May Day

May Day

Going Down

May Day

在这一个文件中,uniq将前三个May Day看作重复副本,但是因为第4行有不同的文本,故并不认为第五行持续的May Day为其副本。所以uniq将保留这一行。

命令一般格式为:

uniq –u d c –f input-file output-file

-u :只显示不重复行

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

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

-f :n为数字,前n个域被忽略

 

join

join用来将来自两个分类文本文件的行连在一起,有点类似SQL中的join。有两个文件file1和file2,已经分类。每个文件都有一些元素与另一个文件相关。由于这种关系,join将两个文件连在一起,有点像修改一个主文件,使之包含两个文件里的共同元素。

join [options] input-file1 input-file2

an :n为一数字,用于连接时从文件n中显示不匹配行。例如,-a1显示第一个文件的不匹配行,-a2为从第二个文件中显示不匹配行

o n.m :n为文件号,m为域号。1.3表示只显示文件1第三域, 每个n,m必须用.号分隔,比如1.3, 2.1。

j n m :n为文件号,m为域号。使用其他域做连接域。

t :域分隔符,用来设置非空格或tab键的域分隔符,例如,指定冒号做域分隔符 –t:

 

cut

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

cut [options] file1 file2

-c :list 指定剪切字符数

-f :field 指定剪切域数

-d :指定域空格和tab键不同的域分隔符

-c :用来指定剪切范围:

-c1,5-7 :剪切第一个字符,然后是第5到第7个字符

-c1-50 : 剪切前50个字符

-f :格式与-c类似

-f 1,5 :剪切第1域,第5域

-f1, 10-12 :剪切第1域,第10域到第12域

 

paste

cut用来从文本文件或标准输出中抽取数据列或域,然后再用paste可以将这些数据黏贴起来形成相关文件。黏贴两个来源不同的数据时,需要将其分类,并确保两个文件行数相同。

paste按行将不同文件行信息放在一行。缺省用空格或tab键分隔新行中不同文本。

 

paste –d –s –file1 file2

-d :指定不同于空格或tab的域分隔符。例如-d@,用@分隔域

-s :将每个文件合并成行而不是按行黏贴

- 使用标准输入,例如 ls –l |paste,只在一列上显示输出。

 

split

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

split –output-file-size input-filenameoutput-filename

按每个文件2行分割: split -2 split1
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  sort uniq join cut