zoukankan      html  css  js  c++  java
  • 利用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合并所有文件。

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

     

  • 相关阅读:
    hibernate映射-单向多对一映射
    CSS
    HTML基础
    复习
    元类,单例
    数据类型,约束,存储引擎
    数据库概念,安装,基本操作
    IO模型
    异步回调,协程
    GIL锁,线程池,同步异步
  • 原文地址:https://www.cnblogs.com/hiccup/p/5423973.html
Copyright © 2011-2022 走看看