`
suncf1985
  • 浏览: 27951 次
  • 性别: 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脚本的编写及使用.

    提取leach图像的awk文件

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

    用awk数组处理两个文件

    主要讲解了关于shell中用awk数组处理文件的用法

    awk处理两个文件的方法

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

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

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

    unix shell awk 修改ini文件的脚本

    临到要用的时候发现unix下面通常都是用c实现的ini文件操作,网上搜了半天没有现成可用的,真是郁闷,只好自己写了一个,这个程序是对INI文件进行修改的,其实只要删掉几句就变成了查找的了

    AWK手册 中文帮助文档

    AWK中文帮助文档,包含awk详细讲解以及实例程序

    NS2 分析网络性能的AWK文件

    自己编写的经过验证的AWK文件, 用于分析NS2中的TRACE文件,来 解析网络性能,保证可以用,但是不同的 机子会有不同的效果,大家改一些绝对可以用。

    linux-du查看文件大小

    linux du命令查看文件大小,配合awk会更强大

    AWK文件处理总结

    awk文本的处理awk文本的处理awk文本的处理awk文本的处理awk文本的处理awk文本的处理awk文本的处理awk文本的处理awk文本的处理awk文本的处理awk文本的处理awk文本的处理awk文本的处理awk文本的处理awk文本的处理

    awk学习awk学习awk学习awk学习

    awk学习awk学习awk学习awk学习awk学习awk学习awk学习

    Sed与awk 中文第二版

    awk是根据它的开发者aho、weinberger和kernighan命名的。awk是一种编程语言,它可以使你很容易地处理结构化数据和生成格式化报告。第二版介绍了awk的posix标准,同时介绍了一些可免费使用的以及商业版的awk。 本书在...

    AWK中文详细描述

    AWK翻译,描述详细使用 翻译不易,多多包涵 资源共享,人人有责

    awk入门到精通.pdf

    (awk 指令并不多, 且其中之大部分与 C语言中之用法一致, 本手册中对该类指令之语法及特性 不再加以繁冗的说明, 读者若欲深究,可自行翻阅相关的 C 语言书籍) 2. awk概述 为什么使用awk awk 是一种程序语言. 它具有...

    AWK用法AWK用法AWK用法

    awk ‘/101/’ file 显示文件file中包含101的匹配行。 awk ‘/101/,/105/’ file awk ‘$1 == 5′ file awk ‘$1 == “CT”‘ file 注意必须带双引号 awk ‘$1 * $2 >100 ‘ file awk ‘$2 >5 && $2<=15' file

    生成awk测试文件的shell脚本文件

    生成awk测试文件的shell脚本文件,文件共有两个参数(可全部留空),第一个参数是生成的新文件名称,第二个参数是key值名称,也就是内部的重复循环部分的字符串

    Sed与awk_中英文高清版

    Sed与awk_中英文高清版

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

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

    三剑客之【awk】.html

    加入了自己在平时运用中的实例,比如通过查询数据库生成csv文件或insert语句。将markdown文件转换成了html文件。 awk有许多强大的字符串函数 gsub(r,s) #在整个$0中,用s代替r gsub(r,s,t) 在整个t中,用s代替r ...

Global site tag (gtag.js) - Google Analytics