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...