您的位置:首页 > 运维架构 > Linux

linux 使用shell脚本实现对大文件的去重排序 ——使用分割文件方法

2019-04-10 16:20 901 查看

对有序的大文件的去重排序,首先确定文件大小,分割比例,直接上代码:

[code]#!/bin/bash

#号是注释

#文件名称,改为自己的实际文件路径
#文件内容每行都类似  2ff9a2acc|8.0.0.168|Anc|6.1x64|2052|2018-01-25
split_file_name=logon.txt

#去掉空格统计文件行数
lines=`wc -l $split_file_name | sed 's/ .*//g'`

#确定等比例分割的行数,这里分成20个文件
lines_per_file=`expr $lines / 20`

#分割文件 -d可以设置文件大小,这里没设置, -l设置文件行数,这里设置了 $lines_per_file 行
#分割后的文件类似 __part_logon.txt01 __part_logon.txt02
split -d -l $lines_per_file $split_file_name __part_$split_file_name

#循环处理__part_开头的文件
for file in __part_*
do
{
#按照文件中的|符号分割排序  -r -k2,2表示对8.0.0.168这一列排序  -r排序
#然后去重文件  -u -k1,1 -k3,3表示同时对2ff9a2acc列和Anc列去重
# -u表示去重  -o表示写入文件  这里是写入以sort_开头的文件
sort -f -t "|" -r -k2,2 $file | sort -f -t "|" -u -k1,1 -k3,3 -o sort_$file
}
done

#同时对 sort_开头的文件去重并输出覆盖原来的logon.txt文件
sort -smu sort_* > $split_file_name

#然后删除分割的与分割排序去重的文件
rm -f __part_*
rm -f sort_*

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: