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 对传入参 ...
随机推荐
- eclipse中svn重新设置账户
查看svn版本:windows > preference > Team > SVN 1.如果svn插件是svnkit版 只需找到.keyring文件,一般目录是:eclipse安装目 ...
- Docker部署Python应用程序
Docker部署Python应用程序 1. 单个py文件部署 生成Dockerfile 文件 插件用的豆瓣的镜像,,重置时间(容器的默认时间是UTC时间与宿主机的相差8小时). 文中需要三个插件(pe ...
- 留学英文论文写作Abstract三种类型
所谓Abstract,就是对所写论文主要内容的精炼概括.Abstract是美国人的说法,英国的科技期刊喜欢称之为Summary.在英文中,有资料是这么对其定义的:Abstract is a sketc ...
- MongoDB 教程
版权所有,未经许可,禁止转载 章节 MongoDB 入门 MongoDB 优势 MongoDB 安装 MongoDB 数据建模 MongoDB 创建数据库 MongoDB 删除数据库 MongoDB ...
- 【Python】【Django】登录用户-链接Mysql
- 【剑指Offer】面试题18. 删除链表的节点
题目 给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点. 返回删除后的链表的头节点. 注意:此题对比原题有改动 示例 1: 输入: head = [4,5,1,9], val = 5 ...
- Android数据库(sqlite)之Room
说在前面: 1.使用Room需要添加的依赖: dependencies { def room_version = "2.2.3" implementation "andr ...
- mysql字符串操作
https://h.w.com/lin/h ) 效果: https://h.w.com huangwanlin ) 效果: huang huangwanlin ) 效果: wanlin huangxi ...
- C# web.config常用配置说明(文件上传大小、调试、session)
直接贴代码可好(后续用到的在更新) 黄色字体的为说明 <?xml version="1.0" encoding="utf-8"?><!-- 有 ...
- 修改虚拟机ip
在命令行里输入:more /etc/sysconfig/network-scripts/ifcfg-eth0 (注意more后要空一格,还有eth0,最后是数字零). 然后再输入:ifconfig ...