利用Shell腳本進行文件內容去重


      最近在處理文件的時候,遇到文件內容存在大量重復項的情況,很顯然需要文件內容去重。因為使用的是Python,本來想要找找Python文件內容去重的方法,但是看到的基本利用Set或者List等方法(還沒來得及逐一驗證)。后來,找到一個利用Shell腳本寫的文件內容去重,用了一下覺得很贊,在這里深入的研究一下,也算是對Shell了解和熟悉一下。

      shell腳本如下所示:

#!/bin/bash
lines=$(wc -l $1 | sed 's/ .*//g')
lines_per_file=`expr $lines / 20`
split -d -l $lines_per_file $1 __part_$1
for file in __part_*
do
{
  sort $file > sort_$file
} &
done
wait
sort -smu sort_* > $2
rm -f __part_*
rm -f sort_*

      腳本運行的命令如下:(假如文件保存的名字為:merge_sort.sh)

./merge_sort.sh file_to_be_sort file_sorted

      下面,來說明一下腳本中幾個比較重要的命令。

      wc -l命令的意思就是統計文本的行數,但是得到的結果如下圖所示:

76

      除了得到文本的所有行外,文件的名字也輸出了,如果只要得到行數,后面的內容需要替換掉。

      sed命令可以完成數據的搜索並替換,具體格式如下:

sed 's/要被取代的字串/新的字串/g'

      sed 's/ .*//g'命令的意思是把除換行符以外的任意字符去掉。

      split命令用於分割文件。-d表示分割后的文件后綴用數字代替字母。-l表示分割后的文件中,每個文件有多少行。

      sort命令用於對文件內容進行排序。-s表示穩定排序,可以讓sort不在關鍵詞相同的時候再比較一整行(一般是要關鍵詞相同的時候,才比較一整行),-u刪除重復項,-m合並所有文件。

      這里,只是對腳本中幾個重要的命令的一些簡要說明。其實,這幾個命令有更加強大的用法。后續慢慢體會吧。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM