结合编辑数据文件的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中传参方式的更多相关文章

  1. 浅谈对java中传参问题的理解

    之前用的c/c++比较多,在c/c++中对于传参类型,无外乎就是传值.传引用.传指针这几种.但在java中,由于没有指针类型,其传参的方式也发生了相应的变化.在网上找了找,按我之前的理解,java中传 ...

  2. react中的传参方式

    react是一个SPA模式,即组件嵌套租,在一个单页面的应用中组件间的数值传递是必不可少的,主要的传参方式大致有一下几种: 1,在挂载的地方给组件传参 ReactDOM.rander(<a na ...

  3. Web API中的传参方式

    在Restful风格的WebApi的里面,API服务的增删改查,分别对应着Http Method的Get / Post / Delete /Put,下面简单总结了Get / Post /Delete ...

  4. Python函数定义及传参方式

    主要内容:     1.函数初识     2.函数传参方式        (1)位置参数        (2)默认参数        (3)关键参数        (4)非固定传参 一.函数初识 1. ...

  5. java 传参方式--值传递还是引用传递

    java 传参方式--值传递还是引用传递 参数是按值而不是按引用传递的说明 Java 应用程序有且仅有的一种参数传递机制,即按值传递.写它是为了揭穿普遍存在的一种神话,即认为 Java 应用程序按引用 ...

  6. mock和axios常见的传参方式

    第一次接手项目,传参方式还有些吃力,因此做一下总结. 首先我们需要会看swagger中的接口.里面写了某个接口需要接收什么样的值,前端怎么传递这个值 在mock中的传参方式: mock中传参的方式有两 ...

  7. $router和$route的区别,路由跳转方式name 、 path 和传参方式params 、query的区别

    一.$router和$route的区别 $router : 是路由操作对象,只写对象$route : 路由信息对象,只读对象 例子://$router操作 路由跳转 this.$router.push ...

  8. scrapy post payload的坑及相关知识的补充【POST传参方式的说明及scrapy和requests实现】

    一.问题及解决: 在用scrapy发送post请求时,把发送方式弄错了. 本来应该是 application/x-www-form-urlencoded  弄成了application/json. 但 ...

  9. MyBatis中传参时为什么要用#{}

    MyBatis中传参时为什么要用#{},这个问题和MyBatis如何防止SQL注入类似.不过在解释这个问题之前,先解释一下什么是SQL注入,还有些称作注入攻击这个问题. SQL注入就是SQL 对传入参 ...

随机推荐

  1. sql server 2012插入排序后的数据到临时表无效

    IF OBJECT_ID('TEMPDB..#list') IS NOT NULLBEGIN DROP TABLE TEMPDB.#list END CREATE TABLE #list(OFC_ID ...

  2. Ican协议建立连接我的感悟

    有一个情形我突然之间想明白了. 注意下面情形:                             假设节点A与节点B已经 正常的建立了连接,并且进行了通讯. 假设 节点B收到了 节点A 的 &q ...

  3. IOCTL_DISK_GET_DRIVE_GEOMETRY

    IOCTL_DISK_GET_DRIVE_GEOMETRY: 获取磁盘参数 c++实现: #include <Windows.h> #include <winioctl.h> ...

  4. ROS常见问题(三) 报错are you sure it is properly registered and that the containing library is built?

    报错: [FATAL] [1576042404.913706482]: Failed to create the global_planner/GlobalPlanner planner, are y ...

  5. Java笔记: 继承成员覆盖和隐藏

    在扩展类时,既可以向类中添加新的成员,也可以重新定义现有的成员.重定义现有成员的具体效果取决于成员的类型.本文不会详细的介绍概念,只简要总结覆盖(overriding,也叫重写)和隐藏(hiding) ...

  6. zoj 1483 划分类DP

    还是看了little_w大神写的才知道怎么写,看完发现自己题意也理解错了,里面有个neighboring,意思就是你指定任务的时候指定的是原序列中连续的一段 然后就是怎么DP了,新学了个很好的dp模型 ...

  7. Node.js NPM Package.json

    章节 Node.js NPM 介绍 Node.js NPM 作用 Node.js NPM 包(Package) Node.js NPM 管理包 Node.js NPM Package.json Nod ...

  8. ELK 介绍

    章节 ELK 介绍 ELK 安装Elasticsearch ELK 安装Kibana ELK 安装Beat ELK 安装Logstash ELK是什么? ELK是3个开源产品的组合: Elastics ...

  9. python3 --- unittest单元测试框架

    1.unittest结构 1.单元测试的框架 unittest(python自带,无需额外安装)+接口2.文件,命名时,千万不要写成unittest这样的模块名,会报错的3.功能测试 1)写用例 Te ...

  10. 11 —— 回顾 JSON 相互转换的知识点

    /** * json 转换的两种方式 * * 一,转为字符串 (序列化的过程) * JSON.stringify() * * 二,json 转化为字符串 (反序列化的过程) * JSON.parse( ...