shell 檔案合併 去重 分割
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 <行數>][要切割的檔案][輸出檔名]
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 >newloga.txt#awk ‘{if (NR>=120000) print $0}’ log.txt >newlogb.txt
以上兩個命令,都要遍歷整個檔案,所以考慮到效率,應使用合併成:
#awk ‘{if (NR<120000) print $0 >”newloga.txt”;if (NR>=120000) print $0>”newlogb.txt”}’ log.txt
以上四種方法,除了dd之外的三種方式都可以很好的整行分割日誌檔案。進行分割時,應考慮在讀一次檔案的同時完成,如不然,按下面的方式分割:
Cat log.txt| head –12000 >newloga.txt
Cat log.txt | tail –23000 >newlogb.txt
如用此方法分割檔案的後一部分,那麼執行第二行命令檔案時,前x行是白白讀一遍的,執行的效率將很差,如檔案過大,還可能出現記憶體不夠的情況。
相關文章
- linux檔案合併、去重、拆分Linux
- python合併多個csv檔案並去重Python
- 超級檔案分割《合併》機(分割大檔案)
- java快速分割及合併檔案Java
- linux下檔案分割與合併 (轉)Linux
- linux下檔案分割與合併(轉)Linux
- Linux檔案分割與合併:split&catLinux
- Linux - 檔案的分割(split)與合併(cat)Linux
- 大型檔案去重
- 用shell指令碼合併多個檔案內容指令碼
- Pandas之EXCEL資料讀取/儲存/檔案分割/檔案合併Excel
- windows合併檔案Windows
- 合併iso檔案
- Hive小檔案合併Hive
- 在不刪除檔案的前提下合併硬碟分割槽硬碟
- Python批次分割Excel後逐行做差、合併檔案的方法PythonExcel
- 使用 7-Zip 進行檔案分割與合併(命令列示例)命令列
- 影片合併分割軟體如何合併影片
- win10分割槽合併保留資料怎麼操作_win10硬碟合併分割槽並保留檔案詳細步驟Win10硬碟
- PDF檔案進行線上分割如何去操作
- Linux下合併檔案Linux
- git合併分支,如果選擇性的合併檔案?Git
- 合併分割槽(coalesce partition)
- 分享:SQL中 LEFT JOIN 左表合併去重實用技巧SQL
- python3 大檔案去重Python
- 資料檔案合併與拆分
- 檔案切割以及合併筆記筆記
- Python之合併PDF檔案Python
- win10怎麼合併分割槽_win10合併分割槽的方法Win10
- Flink SQL FileSystem Connector 分割槽提交與自定義小檔案合併策略 SQL
- 辦公自動化:PDF檔案合併器,將多個PDF檔案進行合併
- Mac如何使用預覽應用合併PDF檔案 Mac合併PDF檔案教程詳解Mac
- mac分割槽合併APFS容器Mac
- MapReduce(三):分割槽、排序、合併排序
- 合併PDF檔案怎樣做?分享兩種PDF合併方法
- nodejs 讀取excel檔案,並去重NodeJSExcel
- 在 Linux 中分割和重組檔案Linux
- 多個 EXCEL 檔案如何合併成一個檔案Excel