awk中传参方式
结合编辑数据文件的shell脚本学习awk传参方式,该脚本功能:
a.取VIDEOUSR_11082017_0102_ONLINE_STASTIC.dat文件中第87个字段的低8位;
b.将每行数据的第3列和第87列对调;
3.修改后的数据生成到最新时间戳文件中。
1.常规用法
#!/usr/bin/bash if [[ $# -eq ]];then
srcfile="$1" #文件名
bit=$ #低bit位
filetimetmp=${srcfile#*_}
filetime=${filetimetmp%%_*} #截取文件中时间戳,日+月+年
realtime=`date +"%d%m%Y"` #生成最新时间戳,日+月+年
let databit="2**$bit" #低bit位对应的值,通过取余截取第低bit位数值
if [[ -f $srcfile ]];then
newfile=${srcfile//$filetime/$realtime} #生成最新时间戳对应的文件
if [[ -f $newfile && $newfilew =~ ".dat" ]];then
rm -rf $newfile
fi
cat $srcfile|sed 's/ /#/'|awk -v mod=$databit -F ',' '{predata=$87%mod;$87=$3;$3=predata;print $0}'|sed 's/ /,/g'|sed 's/#/ /' >>$newfile
##其中sed 's/ /#/'和sed 's/#/ /'是对数据中带有空格时间(-- ::)做保护(编辑前空格替换为#看,编辑完后#替换为空格)
fi
fi
调用方式:sh datatransfomate.sh VIDEOUSR_11082017_0102_ONLINE_STASTIC.dat 8
awk传参:awk -v mod=$databit,之后可以在‘{}’中使用mod变量。
但字段值不能通过变量方式进行修改,即$87和$3如何使用外部变量进行传参。
2.${}变量传参
#!/usr/bin/bash if [[ $# -eq ]];then
srcfile="$1" #文件名
exchghead=$ #对应第3个字段
exchgtail=$ #对应第87个字段
bit=$ #低bit位
filetimetmp=${srcfile#*_}
filetime=${filetimetmp%%_*} #截取文件中时间戳,日+月+年
realtime=`date +"%d%m%Y"` #生成最新时间戳,日+月+年
let databit="2**$bit" #低bit位对应的值,通过取余截取第低bit位数值
if [[ -f $srcfile ]];then
newfile=${srcfile//$filetime/$realtime} #生成最新时间戳对应的文件
if [[ -f $newfile && $newfilew =~ ".dat" ]];then
rm -rf $newfile
fi
cat $srcfile|sed 's/ /#/'|awk -v mod=$databit -F ',' "{predata=\$${exchgtail}%mod;\$${exchgtail}=\$${exchghead};\$${exchghead}=predata;print \$0}"|sed 's/ /,/g'|sed 's/#/ /' >>$newfile
##其中sed 's/ /#/'和sed 's/#/ /'是对数据中带有空格时间(-- ::)做保护(编辑前空格替换为#看,编辑完后#替换为空格)
fi
fi
调用方式:sh datatransfomate.sh VIDEOUSR_11082017_0102_ONLINE_STASTIC.dat 3 87 8
awk传参:由于使用了“",shell会对“”中$进行索引替换,因此需要对部分$进行转译。
awk中“”经过shell处理后会转换:awk -v mod=$databit -F ',' "{predata=\$${exchgtail}%mod;\$${exchgtail}=\$${exchghead};\$${exchghead}=predata;print \$0}"
==》awk -v mod=$databit -F ',' ‘{predata=$87%mod;$87=$3;$3=predata;print $0}’
3.使用总结
a.常规使用 -v 即可传参,awk -v innerpara=$outerpara -F ',' '{print innerpara,$0}'
b.通过变量方式传参,awk -v -F ',' "{print \$${outerpara},\$0}" ##注意使用转译符即可
c.以上两种传参方式可以同时使用
awk中传参方式的更多相关文章
- 浅谈对java中传参问题的理解
之前用的c/c++比较多,在c/c++中对于传参类型,无外乎就是传值.传引用.传指针这几种.但在java中,由于没有指针类型,其传参的方式也发生了相应的变化.在网上找了找,按我之前的理解,java中传 ...
- react中的传参方式
react是一个SPA模式,即组件嵌套租,在一个单页面的应用中组件间的数值传递是必不可少的,主要的传参方式大致有一下几种: 1,在挂载的地方给组件传参 ReactDOM.rander(<a na ...
- Web API中的传参方式
在Restful风格的WebApi的里面,API服务的增删改查,分别对应着Http Method的Get / Post / Delete /Put,下面简单总结了Get / Post /Delete ...
- Python函数定义及传参方式
主要内容: 1.函数初识 2.函数传参方式 (1)位置参数 (2)默认参数 (3)关键参数 (4)非固定传参 一.函数初识 1. ...
- java 传参方式--值传递还是引用传递
java 传参方式--值传递还是引用传递 参数是按值而不是按引用传递的说明 Java 应用程序有且仅有的一种参数传递机制,即按值传递.写它是为了揭穿普遍存在的一种神话,即认为 Java 应用程序按引用 ...
- mock和axios常见的传参方式
第一次接手项目,传参方式还有些吃力,因此做一下总结. 首先我们需要会看swagger中的接口.里面写了某个接口需要接收什么样的值,前端怎么传递这个值 在mock中的传参方式: mock中传参的方式有两 ...
- $router和$route的区别,路由跳转方式name 、 path 和传参方式params 、query的区别
一.$router和$route的区别 $router : 是路由操作对象,只写对象$route : 路由信息对象,只读对象 例子://$router操作 路由跳转 this.$router.push ...
- scrapy post payload的坑及相关知识的补充【POST传参方式的说明及scrapy和requests实现】
一.问题及解决: 在用scrapy发送post请求时,把发送方式弄错了. 本来应该是 application/x-www-form-urlencoded 弄成了application/json. 但 ...
- MyBatis中传参时为什么要用#{}
MyBatis中传参时为什么要用#{},这个问题和MyBatis如何防止SQL注入类似.不过在解释这个问题之前,先解释一下什么是SQL注入,还有些称作注入攻击这个问题. SQL注入就是SQL 对传入参 ...
随机推荐
- JavaScript.StringObjec.replace
//StringObject.replace(/regexp/,newContent); //1当newContent为新字符串,就直接用newContent对匹配的内容进行替换. //2当newCo ...
- reduce()、filter()、map()、some()、every()、...展开属性
reduce().filter().map().some().every()....展开属性 这些概念属于es5.es6中的语法,跟react+redux并没有什么联系,我们直接在https:// ...
- Elasticsearch 修改数据
章节 Elasticsearch 基本概念 Elasticsearch 安装 Elasticsearch 使用集群 Elasticsearch 健康检查 Elasticsearch 列出索引 Elas ...
- ProxyPass与ProxyPassReverse及ProxyPassMatch的概述
转载自:https://blog.csdn.net/xiaokui_wingfly/article/details/51481653 apache中的mod_proxy模块主要作用就是进行url的转发 ...
- 每天一点点之 taro 框架开发 - 事件处理与样式表
1.方法调用 state = { name:'张三' } test(){ this.state.name } <button onClick={ this.test.bind(this) } / ...
- Adobe Photoshop CC2014 for MAC 详细破解步骤
1,安装Adobe Photoshop CC2014 for MAC,可以断网安装,如果不断网的话,需要申请一个Adobe ID,是免费申请. 2,下载破解工具,https://sdifen.ctfi ...
- Fragment 知识巩固
重新学习 Fragment 1.Fragment 的生命周期 想要熟练使用 Fragment,那么必须要弄懂它的生命周期. 我们可以先看一下 Fragment 生命周期和 Activity 生命周期的 ...
- (转) Windows如何区分鼠标双击和两次单击
Windows如何区分鼠标双击和两次单击 http://lbsloveldm.blog.hexun.com/12212875_d.html 在Windows平台上,鼠标左键的按下.松开.快速的两次点击 ...
- grep -q
grep -q用于if逻辑判断 安静模式,不打印任何标准输出.如果有匹配的内容则立即返回状态值0. grep -q的用法 # if grep -q hello a.txt ; then ...
- 自学Java第五章——《面向对象的基本特征》
面向对象的基本特征: 1.封装 2.继承 3.多态 6.1 封装 1.好处: (1)隐藏实现细节,方便使用者使用 (2)安全,可以控制可见范围 2.如何实现封装? 通过权限修饰符 面试题:请按照可见范 ...