shell 檔案合併 去重 分割

2021-10-09 19:16:28 字數 2203 閱讀 6667

shell 檔案合併,去重,分割

第一:兩個檔案的交集,並集

前提條件:每個檔案中不得有重複行

取出兩個檔案的並集(重複的行只保留乙份)

取出兩個檔案的交集(只留下同時存在於兩個檔案中的檔案)

刪除交集,留下其他的行

cat file1 file2 | sort | uniq > file3

cat file1 file2 | sort | uniq -d > file3

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 《行數》][要切割的檔案][輸出檔名]

208363 log.txt

29m newlogaa

22m newlogab

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

方法2:(dd分割)

#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

#tail –necho $((208363-208362/2-1))log.txt >newlogb.txt //後x行重定向輸出到乙個檔案中;

#gzip newloga.txt newlogb.txt //將兩個檔案進行壓縮

方法4:(awk分割)

#gzip log.txt.gz#awk 『』 log.txt >newloga.txt#awk 『』 log.txt >newlogb.txt

以上兩個命令,都要遍歷整個檔案,所以考慮到效率,應使用合併成:

#awk 『』 log.txt

以上四種方法,除了dd之外的三種方式都可以很好的整行分割日誌檔案。進行分割時,應考慮在讀一次檔案的同時完成,如不然,按下面的方式分割:

cat log.txt| head –12000 >newloga.txt

cat log.txt | tail –23000 >newlogb.txt

如用此方法分割檔案的後一部分,那麼執行第二行命令檔案時,前x行是白白讀一遍的,執行的效率將很差,如檔案過大,還可能出現記憶體不夠的情況。

shell檔案合併去重

第一 兩個檔案的交集,並集 前提條件 每個檔案中不得有重複行 取出兩個檔案的並集 重複的行只保留乙份 取出兩個檔案的交集 只留下同時存在於兩個檔案中的檔案 刪除交集,留下其他的行 cat file1 file2 sort uniq file3 cat file1 file2 sort uniq d ...

linux檔案的合併,去重與分割

前提條件 每個檔案中不得有重複行 取出兩個檔案的並集 重複的行只保留乙份 取出兩個檔案的交集 只留下同時存在於兩個檔案中的檔案 刪除交集,留下其他的行 1.cat file1 file2 sort uniq file3 2.cat file1 file2 sort uniq d file3 3.ca...

Linux 檔案合併去重

第一 兩個檔案的交集,並集 前提條件 每個檔案中不得有重複行 1.取出兩個檔案的並集 重複的行只保留乙份 2.取出兩個檔案的交集 只留下同時存在於兩個檔案中的檔案 3.刪除交集,留下其他的行 1.cat file1 file2 sort uniq file3 2.cat file1 file2 so...