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

2021-10-03 11:20:30 字數 3068 閱讀 3592

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

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

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

刪除交集,留下其他的行

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 『』

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 檔案合併 去重 分割

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

Linux 檔案合併去重

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

linux檔案合併,去重

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