SHELL脚本之awk妙用
对于一个sougou文本文件,解压后大概4G,要求在其基础上切出第一列时间年月日时分秒增加在列中,作为hive的一个索引。先将文件head一下展示格式:
[root@Master date]# head -n sogou.full.utf8
57375476989eea12893c0c3811607bcf 奇艺高清 http://www.qiyi.com/
66c5bb7774e31d0a22278249b26bc83a 凡人修仙传 http://www.booksky.org/BookDetail.aspx?BookID=1050804&Level=1
b97920521c78de70ac38e3713f524b50 本本联盟 http://www.bblianmeng.com/
6961d0c97fe93701fc9c0d861d096cd9 华南师范大学图书馆 http://lib.scnu.edu.cn/
f2f5a21c764aebde1e8afcc2871e086f 在线代理 http://proxyie.cn/
最开始不知道awk这个命令,就单独切出很多临时文件最后通过paste命令将所有文件拼接起来,小文件测试成功,最后大文件报错说空间不够,跑了一半然后停了
#!/bin/bash cat $ | cut -b - > year.txt
cat $ | cut -b - > mouth.txt
cat $ | cut -b - > day.txt
cat $ | cut -b - > hour.txt
cat $ | cut -b - > min.txt
cat $ | cut -b - > sec.txt
paste year.txt mouth.txt day.txt hour.txt min.txt sec.txt $ >$
rm -f year.txt
rm -f mouth.txt
rm -f day.txt
rm -f hour.txt
rm -f min.txt
rm -f sec.txt
主要原因是每次读取整个文件但是仅仅只是切出一小部分,同时中间变量通过临时文件的方式保存。这样子不仅仅增加了io时间,也减少了处理效率。
而后使用awk命令,命令是按行读取处理的。Linux博大精深,仅仅一个awk就是一个单独的编程语言,免去了跳转到其他脚本处理的麻烦(R或者Python)
#!/bin/bash infile=$
outfile=$
awk -F '\t' '{print $0"\t"substr($1,0,4)"\t"substr($1,4,2)"\t"substr($1,6,2)"\t"substr($1,8,2)}' $infile > $outfile
行处理的方式提高了效率,同时让逻辑更加清楚。空余时间还是要加强Linux的命令学习
awk语法详见:{点击这里:http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2858470.html}
SHELL脚本之awk妙用的更多相关文章
- shell脚本之awk(一)
运维必备技能 概述: 1.awk是一种编程语言,用于linux/unix下对文本和数据进行扫描.处理数据来源:标准输入.文件.管道. 2.linux中常用的awk编译器版本有mawk,gawk.R ...
- Shell脚本之awk篇
目录:一.概述二.awk基本语法格式三.awk基本操作四.awk条件及循环语句五.awk函数六.awk演示示例(源自于man手册) 一.概述 1. 产品概述: awk是一种编程语言,用于在linux/ ...
- Shell脚本之awk详解
一.基本介绍 1.awk: awk是一个强大的文本分析工具,在对文本文件的处理以及生成报表,awk是无可替代的.awk认为文本文件都是结构化的,它将每一个输入行定义为一个记录,行中的每个字符串定义为一 ...
- shell脚本,awk实现跳过文件里面的空行。
1.用awk '{if(!NF ){next}}1' file11 实现对文件里面的空行进行跳过操作,并输出结果. 2. awk '{if(!NF || /^#/){next}}1' file11 实 ...
- shell脚本,awk里面的BEGIN讲解。
解释: BEGIN{}这个特殊的pattern最常用的就是 变量赋值. BEGIN这个pattern就是文件没开始读的时候 执行 awk 'BEGIN{FS=":";OFS=&qu ...
- shell脚本,awk利用NF来计算文本显示的行数。
解释: 1.awk 'NF{a++;print a,$0;next}1' file4 首先判断NF是否存在值,第一行第二行第三行第四行都存在,进行执行后面的输出,输出后碰到next后,就结束了后面的操 ...
- shell脚本,awk替换{}里面的内容
如何将oxo{axbxc}oxo{dxexf}oxo里面的{}里面的x 替换为; 用awk实现 [root@localhost 09-30]# echo 'oxo{axbxc}oxo{dxexf}ox ...
- shell脚本,awk常见初始化变量的题目。
文件 内容如下 clone=line1gb=line1gi=line1lib=line1gb=line2gi=line2lib=line2clone=line3gb=line3gi=line3lib= ...
- shell脚本,awk如何处理文件中上下关联的两行。
文件d.txt如下内容 ggg 1portals: 192.168.5.41:3260werew 2portals: 192.168.5.43:3260 如何把文件d.txt内容变为如下内容 ggg ...
随机推荐
- Django具体操作(三)
理解表单类:上一篇中讲到了用户登录代码实现,用户登录框可以用HTML代码实现或者是表单实现. 在.个人的app下创建forms.py(这里很多人会写成from) 这个文件是专门存放各种与表单有关的类. ...
- iPhone X系列 的获取 - 安全区顶部和底部高度
///1. 获得当前窗口 var JY_WINDOW: UIWindow? { get{ if let app = UIApplication.shared.delegate as? AppDeleg ...
- 我的第一个博客——Fragment遇到的问题
最近项目中使用fragment时遇到了一些问题: 1.fragment的刷新问题. 解决:我的情况是有多个fragment时,只需要刷新其中几个界面.之前我在网上看到的一些方法.如下: 首先在Adap ...
- JFinal中文件上传后会默认放置到WebContent的upload包下,但是tomcat会自动重启,当我们再次打开upload文件夹查看我们刚刚上传的文件时,发现上传的文件已经没有了。
JFinal中文件上传后会默认放置到WebContent的upload包下,但是tomcat会自动重启,当我们再次打开upload文件夹查看我们刚刚上传的文件时,发现上传的文件已经没有了.因为tomc ...
- maven项目运行报错invalid LOC header (bad signature)
切换到项目目录pom.xml文件夹 执行以下命令: mvn test -e -X 找到出错信息 进入目录删除文件. 在ide里面重新部署项目即可.
- iOS常用代码总结
1.读取图片NSString *path = [[NSBundle mainBundle] pathForResource"icon" ofType"png"] ...
- VS2010正则批量替换set_和get_
批量替换set_: daohang.set_ChannelName(rowArray[0]["ChannelName"].ToString()); daohang.set_Chan ...
- windows driver
C:\Windows\System32\DriverStore\FileRepository
- 室内设计类网站Web原型制作分享——Dinzd
Dinzd是一家德国室内设计网站,网站内涵盖全球设计精品资讯以及优秀案列.网站布局简单直观,内容丰富. 此原型模板所用到的交互动作有结合弹出面板做下拉菜单效果,鼠标按下文字按钮跳转页面,按钮hover ...
- 把dataset对象转换成list集合方法
public static List<T> GetList<T>(DataTable table) where T:new() { List<T> list = n ...