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 对传入参 ...
随机推荐
- LeetCode874 模拟行走机器人(简单模拟—Java之HashSet简单应用)
题目: 机器人在一个无限大小的网格上行走,从点 (0, 0) 处开始出发,面向北方.该机器人可以接收以下三种类型的命令: -2:向左转 90 度-1:向右转 90 度1 <= x <= 9 ...
- 51nod 1065:最小正子段和
1065 最小正子段和 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 收藏 取消关注 N个整数组成的序列a[1],a[2],a[3],-,a[n],从中选出一 ...
- HihoCoder第十四周:无间道之并查集
#1066 : 无间道之并查集 时间限制:20000ms 单点时限:1000ms 内存限制:256MB 描述 这天天气晴朗.阳光明媚.鸟语花香,空气中弥漫着春天的气息--额,说远了,总之,小Hi和小H ...
- 用JS改变embed标签的src属性
思路: A.先隐藏embed标签 B.清除embed元素 C.为embed重新赋值,加入Html页面中 1.html代码 <object id="forfun" classi ...
- plsql调用执行存储过程
参考 https://www.cnblogs.com/enjoyjava/p/9131169.html ------------------------------------------------ ...
- <强化学习>无模型下计算给定策略对应的价值函数,Model free Prediction,评估一个给定策略的表现
一.Intro Prediction只是评估给定策略的表现,直白的说它是找 “在环境ENV下,AGENT按照给定的策略pai,AGENT的价值函数”. 这篇blog只介绍三种计算方法,没有涉及到 “求 ...
- 123-PHP类构造函数
<?php class ren{ //定义人类 private $name; //定义成员属性 public function __construct($name){ //定义构造函数 $thi ...
- SparkStreaming 笔记
简介 SparkStreaming是流式处理框架,是Spark API的扩展,支持可扩展.高吞吐量.容错的准实时数据流处理. 实时数据的来源可以是:Kafka, Flume, Twitter, Zer ...
- MongoDB 教程
版权所有,未经许可,禁止转载 章节 MongoDB 入门 MongoDB 优势 MongoDB 安装 MongoDB 数据建模 MongoDB 创建数据库 MongoDB 删除数据库 MongoDB ...
- vim使用技巧(常用指令)
1. vim基础操作 vim是从 vi 发展出来的一个文本编辑器 .代码补完.编译及错误跳转等做了一些增强 1.1 进入编辑模式 命令 含义 i和I i在光标前插入,I在行首插入. a和A a在光标后 ...