利用Shell脚本进行文件内容去重

      最近在处理文件的时候,遇到文件内容存在大量重复项的状况,很显然须要文件内容去重。由于使用的是Python,原本想要找找Python文件内容去重的方法,可是看到的基本利用Set或者List等方法(还没来得及逐一验证)。后来,找到一个利用Shell脚本写的文件内容去重,用了一下以为很赞,在这里深刻的研究一下,也算是对Shell了解和熟悉一下。shell

      shell脚本以下所示:bash

#!/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)spa

./merge_sort.sh file_to_be_sort file_sorted

      下面,来讲明一下脚本中几个比较重要的命令。.net

      wc -l命令的意思就是统计文本的行数,可是获得的结果以下图所示:blog

76

      除了获得文本的全部行外,文件的名字也输出了,若是只要获得行数,后面的内容须要替换掉。排序

      sed命令能够完成数据的搜索并替换,具体格式以下:get

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

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

      split命令用于分割文件。-d表示分割后的文件后缀用数字代替字母。-l表示分割后的文件中,每一个文件有多少行。sed

      sort命令用于对文件内容进行排序。-s表示稳定排序,可让sort不在关键词相同的时候再比较一整行(通常是要关键词相同的时候,才比较一整行),-u删除重复项,-m合并全部文件。List

      这里,只是对脚本中几个重要的命令的一些简要说明。其实,这几个命令有更增强大的用法。后续慢慢体会吧。

相关文章
相关标签/搜索