zoukankan      html  css  js  c++  java
  • split分割大文件--包含通过awk按规则分割文件到对应子文件

    当对一个大文件进行传输或者分析的时候,一个可以参考的办法是先通过split对文件进行分割,再对每个子文件进行处理,如果需要合并再进行合并。

    split函数可以按文件大小或者行数来进行分割。

    • -a : 指定后缀长度

    • -b : 每个文件多少字节,单位可以为k和M

    • -d : 使用数字后缀而不是字母

    • -l : 指定每个文件的行数,默认1000

    例子:

    切割一个文件为每个子文件20M大小,-b指定20M大小,filename为文件名,prefix为每个子文件的前缀。后缀通常为aa,ab,ac...。

    $ split  -b  20m  filename  prefix
    prefixaa
    prefixab
    prefixac
    prefixad
    ...

    修改为后缀长度为 2,即 -a 2。用数字后缀 -d。每个文件 10M,即 -b 10m。

    $ split -a 2 -d -b 10m access.log haha
    haha00
    haha01
    haha02
    haha03
    ...

    面试题:两个大文件,文件内容如下,需要找出两个文件中相同的数据。

    #文件a
    111
    222
    333
    444
    
    #文件b
    444
    555
    666
    222

    当然可以通过cat a b | sort | uniq -d查找,如果文件太大的话,需要先对文件拆分再进行查找,一般就是先用split把文件a和文件b分别拆分为比如10个文件,但是比较这些子文件的话是很麻烦的,因为a文件的每个子文件都要和b文件的每个子文件做一遍比较,就是要比较100次,那么能不能只通过比较10次就能得出结果呢?

    答案就是在拆分时把每行按照一定的规则放到同一个后缀的子文件下,比如这里我们通过取余的方式来分,111 % 10为1,然后就放到子文件a_1中,那么如果b中有111这行数据的话,肯定也是放在子文件b_1中,这样只要比较a和b的对应子文件就可以了,10次比较就搞定了。

    先用awk分出10个子文件,然后再比较就可以了。

    awk '{mod = $0 % 10}{print >> "a_"mod}{close("a_"mod)}' a
    awk '{mod = $0 % 10}{print >> "b_"mod}{close("b_"mod)}' b
  • 相关阅读:
    powershell和cmd区别
    装饰器笔记
    url参数和字典的相互转化
    Python装饰器详解
    python字符串格式化f-string
    Python函数(function)与方法(method)区别
    jenkins钉钉插件报错keywords not in content
    jenkins配置邮件
    vim常用操作
    Vue之axios请求
  • 原文地址:https://www.cnblogs.com/leezhxing/p/5494025.html
Copyright © 2011-2022 走看看