`
suncf1985
  • 浏览: 28890 次
  • 性别: Icon_minigender_1
  • 来自: 哈尔滨
社区版块
存档分类
最新评论

awk中按文件大小分解文件并重命名

阅读更多
由于处理数据过于庞大,需要规定文件大小,此文中文件大小按过滤的记录是有效性进行划分.
if(NR % 57000000 ==0){
url_filename=file_name_everyone"_"NR"_url.txt";
noice_filename=file_name_everyone"_"NR"_noice.txt";
app_filename=file_name_everyone"_"NR"_app.txt";
app_a19_filename=file_name_everyone"_"NR"_app_a19.txt";
}
按NR记录数,对某个固定的数值取模,并按当前NR重命名
"hostname" | getline  file_name_everyone; 通过getline将当前机器名,赋给file_name_everyone,当有多个机器时,可保证文件名不重覆,当然机器名字不可相同.
特殊说明:
有一个思路,要是产生文件固定各数,可以手动判断大小,通过"du -h 文件" |getline file_size 来判断大小,(要做一些处理)这样可使产生的数据大小更精确

#############################程序说明#############################
#1.输出路径为当前运行目录上级目录中建立 result文件夹
#2.在result文件夹中建立url_data,url_result,app_result,app_data三个文夹
#3.url_data 待解析URL数据存放目录
#4.url_result 已解析为噪音URL的数据存放目录
#4.app_result 已解析为APP应用所存放文件目录
#5.app_data 待处APP数理
#6.result/log_out.log 处理时间
################################################################
#!/bin/sh
awk -F '|' 'BEGIN{
#取得当前主机名,为每个机器单独部署时文件起一个别名
"hostname" | getline  file_name_everyone;
OFS="|";
is_null = "";
url_filename=file_name_everyone"_url.txt";
noice_filename=file_name_everyone"_noice.txt";
app_filename=file_name_everyone"_app.txt";
app_a19_filename=file_name_everyone"_app_a19.txt";
app_result_filename=file_name_everyone"_app_result.txt";  
app_data_filename=file_name_everyone"_app_data.txt"

app_flag="a19";
#初始化序列号
fruit_num = $2;
haed_http="http://";
print "......解析文件开始........"  strftime("%Y-%m-%d %H:%M:%S") >> "../result/log_out.log"}
END{print "......解析文件结束........"  strftime("%Y-%m-%d %H:%M:%S") >> "../result/log_out.log"}
{
#文件分割 当文件条数为总记录条数50w的倍数时进行拆解文件,500000记录大小为:30M如需要更大的文件,可改变此大小
if(NR % 57000000 ==0){
url_filename=file_name_everyone"_"NR"_url.txt";
noice_filename=file_name_everyone"_"NR"_noice.txt";
app_filename=file_name_everyone"_"NR"_app.txt";
app_a19_filename=file_name_everyone"_"NR"_app_a19.txt";
}

#清洗图片
if(0 == (match(tolower($26),/.*(\.img|\.inf|\.dat|\.dwr|\.fla|\.mp4|\.cmr|\.asm|\.cfg|\.amr|\.war|\.tdz|\.md5|\.jar|\.cmd|\.gif|\.png|\.jpeg|\.bmp|\.def|\.jpg|\.css|\.ico|\.cur|\.swf|\.js\W|\.txt|\.avi|\.xml|\.zip|\.cab|\.crl|\.mp3|\.tpt|\.fcg|\.lrc|\.action|\.rar|\.m4a|\.idx|\.exe|\.dll|\.ini|\.vbs|\.doc|\.flv).*/))){
#当协议类型为http或wap时
if($16==1 || $16==2){
#当url和五源组不为空时
if(length($26)>0 && length($5)>0 && length($6)>0 && length($7)>0 && length($8)>0){
#拆分URL
         split($26,url,"/");
         #按问号拆分变量
         split($26,value,"?");
         #当url以http 或HTTP 或https
        if(url[1]=="http:" || url[1]=="HTTP:" || url[1]=="HTTPS:" || url[1]=="https:" ){
          #当url按斜杠拆分后长度为5时,为没有二级域名时
        if(length(url)==5){
        print fruit_num,$16,$17,$26,url[3],url[4],is_null,substr($26,length(value[1])+2) >> "../result/url_data/"url_filename;
        } else {
        print fruit_num,$16,$17,$26,url[3],url[4],url[5],substr($26,length(value[1])+2) >> "../result/url_data/"url_filename;
          }
         #当url不以http 或HTTP开头时
         }else {
        if(length(url)==3){
        print fruit_num,$16,$17,haed_http$26,url[1],url[2],is_null,substr($26,length(value[1])+2) >> "../result/url_data/"url_filename;
          } else {
  print fruit_num,$16,$17,haed_http$26,url[1],url[2],url[3],substr($26,length(value[1])+2) >> "../result/url_data/"url_filename;
          }
        }
} else {
print fruit_num,$26,$16,$17,1,is_null >> "../result/url_result/"noice_filename;
}        
#协议3:SMTP 4:POP3 5:IMAP4 7:RTSP
} else if($16==3 || $16==4 || $16==5 || $16==7){
if(length($26)>0 && length($5)>0 && length($6)>0 && length($7)>0 && length($8)>0){
if(($17==199 || $17==299 || $17==799 || $17==899) && $16==7){
print fruit_num,$5,$6,$16,$17 >> "../result/app_data/"app_data_filename;
} else if(($17==199 || $17==299 || $17==799 || $17==899) && ($16==3 || $16==4 ||$16==5)){
print fruit_num,$26,$16,$17,app_flag,is_null,is_null >> "../result/app_result/"app_a19_filename;
}
} else {
print fruit_num,$26,$16,$17,1,is_null >> "../result/url_result/"noice_filename;
}
#协议6:FTP 8:MMS
} else if($16==6 || $16==8){
print fruit_num,$26,$16,$17,-1,is_null,is_null >> "../result/app_result/"app_result_filename;
}
} else {
print fruit_num,$26,$16,$17,1,is_null >> "../result/url_result/"noice_filename;
}
}' *.txt
分享到:
评论

相关推荐

    巧用AWK处理二进制数据文件

    AWK是Unix、Linux中处理文本的好工具,可以对复杂的文本文件进行整理,提取其中的全部或者部分数据,按照需要的格式予以显示。但是,AWK的强大功能只针对纯文本文件,对于带有很多不可显示字符的二进制数据文件,单...

    unix shell awk 修改ini文件的脚本

    本篇文章将基于提供的标题、描述、标签以及部分代码内容,详细介绍如何利用Unix Shell结合Awk来实现对INI文件的操作,特别是针对INI文件中的修改功能。 #### 一、INI 文件格式简介 首先,我们需要了解INI文件的...

    用awk数组处理两个文件

    在Shell脚本编程中,`awk`是一种强大的文本分析工具,尤其在处理文件时非常有用。数组是`awk`中的一个重要概念,它允许我们存储和操作一组相关数据。本篇文章将详细讲解如何使用`awk`数组来处理两个文件,以及在不同...

    linuxawk将多个文件结果列合并到一个文件整理.pdf

    在 Linux 环境下,使用 awk 工具可以将多个文件的结果列合并到一个文件中。这篇文章将介绍如何使用 awk 实现该功能,并提供了一个示例 awk 脚本来合并多个文件的结果列。 在 NS 模拟结果中,经常需要对多组参数的...

    提取leach图像的awk文件

    提取leach图像的awk文件提取leach图像的awk文件提取leach图像的awk文件

    NS2 分析网络性能的AWK文件

    在这个场景中,自编的AWK脚本被设计来解析NS2的TRACE文件,提取关于网络性能的关键指标。这些指标可能包括: 1. **吞吐量(Throughput)**:衡量网络在单位时间内传输数据的能力。通过计算发送的数据包总数和总字节...

    awk处理两个文件的方法

    用awk处理两个文件的方法:特定域的合并、替换等

    linux-du查看文件大小

    在Linux系统中,了解文件或目录的大小对于磁盘空间管理至关重要。`du`(disk usage)命令是Linux下常用的工具之一,它可以帮助用户轻松地查看文件或目录占用的空间大小。 #### 1. 基本用法 ##### `du` 基本语法...

    AWK中文详细描述

    在AWK中,字段可以通过内置变量如$1、$2等来访问。AWK还提供了多种内置变量,如NR、NF等,分别表示当前记录的编号和当前记录中字段的数量。 AWK的程序是由一系列模式和动作组成的,当输入记录符合特定模式时,相应...

    AWK文件处理总结

    ### AWK 文件处理总结 #### 一、AWK 入门篇 AWK 是一种强大的文本处理工具,常用于Linux/Unix环境下。它允许用户通过简单的脚本语言来进行复杂的文本处理任务。 **基本命令格式**: ```bash awk 'pattern { action...

    Sed与awk_中英文高清版

    Awk处理数据时,会按行读取文件,对每一行执行用户定义的动作。这些动作可以是基于特定模式的条件判断,也可以是数据的处理和输出。Awk的强大之处在于它内置了丰富的内建函数,可以轻松处理数值计算、字符串操作以及...

    awk思维导图-jpeg单文件

    在awk中,核心概念包括模式(Pattern)和动作(Action)。模式用于匹配输入行,而动作则是当匹配成功时执行的代码块。例如,`/pattern/{action}`结构就是awk的基本语法,其中`/pattern/`是模式,`{action}`是对应的...

    awk使用手册

    - 使用多个文件作为输入,awk将按顺序处理每个文件。 - 示例:`awk 'BEGIN { FS=":" } /pat/ { print }' file1 file2`。 4. **脚本文件**: - awk程序可以保存到脚本文件中,并通过 `-f` 参数调用。 - 示例脚本...

    shell之awk proc文件系统,if_inet6 文件打包

    在描述中提到的“shell之awk proc文件系统,if_inet6 文件打包”,我们可以深入探讨这三个关键概念。 首先,让我们了解`proc`文件系统。在Linux中,`proc`是一个虚拟文件系统,它并不存储实际的数据,而是提供了一个...

    ass109.awk

    在Oracle社区中,开发者和DBA们经常利用awk的强大功能来解析和理解复杂的trace文件,以便快速定位问题。"ass109.awk" 就是这样一款专门针对Oracle数据库trace文件定制的awk脚本,用于协助DBA进行性能分析和故障排查...

    awk文本处理工具

    在awk中,有几个特殊的内部变量和函数,它们对于文本处理非常有用。$0代表当前处理的整行文本,NR代表已处理的记录总数,FNR代表当前文件中的记录数,NF代表当前记录中的字段数量。FS是输入字段分隔符,OFS是输出...

    获取码流每帧大小 idx.awk

    "获取码流每帧大小 idx.awk" 提供了一种方法来跟踪和分析码流中每个帧的数据量。以下是对这个主题的详细说明: 码流通常是指数字媒体数据(如视频或音频)在传输或存储时所采用的格式,它由一系列连续的帧组成,每...

Global site tag (gtag.js) - Google Analytics