当前位置: 移动技术网 > 网络运营>服务器>Linux > 21功能之5G文件数据(内存只有50M)中查找某个数据

21功能之5G文件数据(内存只有50M)中查找某个数据

2020年08月12日  | 移动技术网网络运营  | 我要评论
21功能之5G文件数据(内存只有50M)中查找某个数据1 步骤1)分割文件即可。此时我有日志文件5G,为了保持文件数据完整性,我们使用行分割。我是先生成1G的文件,然后循环5次得出的5G文件,你们也可以用4k直接生成5G的文件,但是CPU慢的就会很卡,我的垃圾电脑就是。。。。。。下面给出生成5G的文件,不过你先要用4k的小文件生成1G的先,代码一样,将次数改一下即可。#!/bin/bashBASE_LOG_PATH=~/MyLinux/BigFileSplit/message.log ##1G文件

21功能之5G文件数据(内存只有50M)中查找某个数据

1 步骤
1)分割文件即可。此时我有日志文件5G,为了保持文件数据完整性,我们使用行分割。我是先生成1G的文件,然后循环5次得出的5G文件,你们也可以用4k直接生成5G的文件,但是CPU慢的就会很卡,我的垃圾电脑就是。。。。。。下面给出生成5G的文件,不过你先要用4k的小文件生成1G的先,代码一样,将次数改一下即可。

#!/bin/bash

BASE_LOG_PATH=~/MyLinux/BigFileSplit/message.log ##1G文件
RES_LOG_PATH=~/MyLinux/BigFileSplit/result.log   ##目标文件


for i in `seq 1 5`; do
    cat $BASE_LOG_PATH >> $RES_LOG_PATH 
    echo "www.example.com|10.32.185.95|-[28/Oct/2014:12:34:39 +0800]|" >> $RES_LOG_PATH    ##目标查找数据
done

2)生成后查看文件的总行数,和对应大小。wc -l result.log与ll -h。得出文件行数为182273288共一亿多行,大小4.6G左右,这里认为是5G。然后利用它们求出分割每个10M小文件需要的行数。即:
5G=182273288;这里假设分割成10M小文件,将5G换算。
(10x102.4x5)M=182273288;除以512后,10M大概就是356002行。

2)split -l 356002 result.log test //分割文件
ll -h //可以看到每个文件是92M左右。

3)自己写一个脚本查找目标数据。

#!/bin/bash
name=~/MyLinux/BigFileSplit/test_   ##用于字符串拼接
for i in `seq 1 512`; do
ename=$name$i                      ##字符串与数字拼接成文件名
cat -n $ename |grep "www.example.com"
done

本文地址:https://blog.csdn.net/weixin_44517656/article/details/107932554

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网