Linux文件合并,去重,分割

第一:两个文件的交集,并集
前提条件:每个文件中不得有重复行
1. 取出两个文件的并集(重复的行只保留一份)
2. 取出两个文件的交集(只留下同时存在于两个文件中的文件)
3. 删除交集,留下其他的行
1. cat file1 file2 | sort | uniq > file3
2. cat file1 file2 | sort | uniq -d > file3
3. cat file1 file2 | sort | uniq -u > file3

第二:两个文件合并
一个文件在上,一个文件在下
cat file1 file2 > file3
一个文件在左,一个文件在右
paste file1 file2 > file3

第三:一个文件去掉重复的行:
sort file |uniq
注意:重复的多行记为一行,也就是说这些重复的行还在,只是全部省略为一行!
sort file |uniq -u
上面的命令可以把重复的行全部去掉,也就是文件中的非重复行!

具体细节可以查看,cat,sort,uniq等命令的详细介绍

第四:将一个大的文件分割成多个小文件:

采用一个50M大小的日志文件进行测试
日志文件名:log.txt.gz。
文件行数:208363

方法1:(split分割)
语法:split [-<行数>][-b <字节>][-C <字节>][-l <行数>][要切割的文件][输出文件名]
# gunzip log.txt.gz             //一定要先解压,否则分割的文件是不能cat/zcat显示;

# wc -l log.txt                 //计算一个文件的总行数;

208363 log.txt
# split -l 120000 log.txt newlog    //通过指定行数,将日志分割成两个文件;
# du -sh *50M     log.txt
29M     newlogaa
22M     newlogab
# file *                         //分割后的文件与原文件属性一样
log.txt: ASCII text, with very long lines, with CRLF line terminators
newlogaa: ASCII text, with very long lines, with CRLF line terminators
newlogab: ASCII text, with very long lines, with CRLF line terminators
# gzip newlogaa newlogab         //将分割后的文件进行压缩,以便传输
 
方法2:(dd分割)
# gunzip log.txt.gz             //一定要先解压,否则分割的文件是不能cat/zcat显示;

#dd bs=20480 count=1500 if=log.txt of=newlogaa      //按大小分第一个文件

#dd bs=20480 count=1500 if=log.txt of=newlogab skip=1500  //将大小之后的生成另一个文件#file *

log.txt: ASCII text, with very long lines, with CRLF line terminators
newlogaa: ASCII text, with very long lines, with CRLF line terminators
newlogab: ASCII text, with very long lines, with CRLF line terminators
 
分割没问题,但会出现同一行分到不同文件的情况,除非你以及日志分析系统可以“容忍”。
 
方法3:(head+tail 分割)
#gzip log.txt.gz               //如不解压缩,下面请用zcat。
#wc -l log.txt                //统计一个行数
208363 log.txt
# head -n `echo $((208363/2+1))` log.txt > newloga.txt      //前x行重定向输出到一个文件中;

#tail –n `echo $((208363-208362/2-1))` log.txt >newlogb.txt //后x行重定向输出到一个文件中;

#gzip newloga.txt newlogb.txt          //将两个文件进行压缩

方法4:(awk分割)
#gzip log.txt.gz#awk ‘{if (NR<120000) print 0}’ log.txt &gt;newloga.txt#awk ‘{if (NR&gt;=120000) print0}’ log.txt >newlogb.txt
 
以上两个命令,都要遍历整个文件,所以考虑到效率,应使用合并成:

#awk ‘{if (NR<120000) print 0 &gt;”newloga.txt”;if (NR&gt;=120000) print0>”newlogb.txt”}’ log.txt

 
以上四种方法,除了dd之外的三种方式都可以很好的整行分割日志文件。进行分割时,应考虑在读一次文件的同时完成,如不然,按下面的方式分割:
Cat log.txt| head –12000 > newloga.txt
Cat log.txt | tail –23000 > newlogb.txt
如用此方法分割文件的后一部分,那么执行第二行命令文件时,前x行是白白读一遍的,执行的效率将很差,如文件过大,还可能出现内存不够的情况。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Linux文件合并指的是将多个文件合并成一个文件。可以使用cat命令将多个文件的内容合并到一个文件中,也可以使用其他工具如sed、awk等进行文件合并。在使用cat命令时,可以使用重定向符号将多个文件的内容输出到一个文件中,例如: cat file1.txt file2.txt > merged.txt 这将把file1.txt和file2.txt的内容合并到merged.txt文件中。 ### 回答2: 在Linux系统中,我们可以使用不同的方法将文件合并在一起。下面我将介绍三种常见的方法: 1. 使用cat命令:cat命令用于连接文件并打印到标准输出上。我们可以使用cat命令将多个文件的内容合并成一个文件。例如,要将file1.txt和file2.txt合并成一个新的文件file3.txt,可以使用以下命令: ``` cat file1.txt file2.txt > file3.txt ``` 这将把file1.txt和file2.txt的内容连接起来,并将结果输出到file3.txt文件中。 2. 使用合并命令(merge):有些Linux发行版提供了merge命令,用于合并两个或多个文件并将结果输出到一个新文件中。例如,要合并file1.txt和file2.txt到新文件file3.txt中,可以使用以下命令: ``` merge file1.txt file2.txt > file3.txt ``` merge命令会按照文件中每行的字典顺序进行合并,并将结果输出到file3.txt文件中。 3. 使用redirect(重定向)操作符和append(追加)操作符:除了使用cat命令和merge命令外,我们还可以使用重定向和追加操作符将一个文件的内容附加到另一个文件中。例如,要将file1.txt的内容附加到file2.txt文件的末尾,可以使用以下命令: ``` cat file1.txt >> file2.txt ``` 这将把file1.txt的内容追加到file2.txt的末尾。 总之,以上是在Linux系统中合并文件的三种常见方法。可以根据实际情况选择其中一种方法来合并文件。 ### 回答3: 对于Linux文件合并,可以使用多种命令和方法来实现。 1. cat命令:cat命令是用于连接文件并打印在标准输出上的命令。可以将多个文件连接在一起,然后输出合并后的结果文件。例如,要将file1和file2合并到file3中,可以使用以下命令: cat file1 file2 > file3 2. paste命令:paste命令用于将多个文件按列合并在一起。该命令默认使用制表符来作为分隔符,可以使用-d选项指定其他分隔符。例如,要将file1和file2按列合并到file3中,可以使用以下命令: paste file1 file2 > file3 3. sort命令:sort命令用于对文件进行排序,并且可以将排序后的结果写入到其他文件中。可以利用这个特性将多个文件的内容进行合并。例如,要将file1和file2的内容按照字母顺序合并到file3中,可以使用以下命令: sort -m file1 file2 -o file3 无论使用哪种方法,都可以根据实际情况选择最合适的命令来进行文件合并操作。这些命令提供了不同的选项和参数,可以根据需要进行灵活的操作。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值