博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
awk中传参方式
阅读量:5150 次
发布时间:2019-06-13

本文共 2350 字,大约阅读时间需要 7 分钟。

结合编辑数据文件的shell脚本学习awk传参方式,该脚本功能:

a.取VIDEOUSR_11082017_0102_ONLINE_STASTIC.dat文件中第87个字段的低8位;

b.将每行数据的第3列和第87列对调;

3.修改后的数据生成到最新时间戳文件中。

 

1.常规用法 

1 #!/usr/bin/bash 2  3 if [[ $# -eq 2 ]];then 4   srcfile="$1" #文件名 5   bit=$2 #低bit位 6   filetimetmp=${srcfile#*_} 7   filetime=${filetimetmp%%_*} #截取文件中时间戳,日+月+年 8   realtime=`date +"%d%m%Y"` #生成最新时间戳,日+月+年 9   let databit="2**$bit" #低bit位对应的值,通过取余截取第低bit位数值10   if [[ -f $srcfile ]];then11     newfile=${srcfile//$filetime/$realtime} #生成最新时间戳对应的文件12     if [[ -f $newfile && $newfilew =~ ".dat" ]];then13        rm -rf $newfile14     fi15        cat $srcfile|sed 's/ /#/'|awk -v mod=$databit -F ',' '{predata=$87%mod;$87=$3;$3=predata;print $0}'|sed 's/ /,/g'|sed 's/#/ /' >>$newfile16        ##其中sed 's/ /#/'和sed 's/#/ /'是对数据中带有空格时间(2017-08-11 17:30:21)做保护(编辑前空格替换为#看,编辑完后#替换为空格)17   fi18 fi

调用方式:sh datatransfomate.sh VIDEOUSR_11082017_0102_ONLINE_STASTIC.dat 8

awk传参:awk -v mod=$databit,之后可以在‘{}’中使用mod变量。

但字段值不能通过变量方式进行修改,即$87和$3如何使用外部变量进行传参。

 

2.${}变量传参

1 #!/usr/bin/bash 2  3 if [[ $# -eq 4 ]];then 4   srcfile="$1" #文件名 5   exchghead=$2 #对应第3个字段 6   exchgtail=$3 #对应第87个字段 7   bit=$4 #低bit位 8   filetimetmp=${srcfile#*_} 9   filetime=${filetimetmp%%_*} #截取文件中时间戳,日+月+年10   realtime=`date +"%d%m%Y"` #生成最新时间戳,日+月+年11   let databit="2**$bit" #低bit位对应的值,通过取余截取第低bit位数值12   if [[ -f $srcfile ]];then13      newfile=${srcfile//$filetime/$realtime} #生成最新时间戳对应的文件14     if [[ -f $newfile && $newfilew =~ ".dat" ]];then15        rm -rf $newfile16     fi17        cat $srcfile|sed 's/ /#/'|awk -v mod=$databit -F ',' "{predata=\$${exchgtail}%mod;\$${exchgtail}=\$${exchghead};\$${exchghead}=predata;print \$0}"|sed 's/ /,/g'|sed 's/#/ /' >>$newfile18        ##其中sed 's/ /#/'和sed 's/#/ /'是对数据中带有空格时间(2017-08-11 17:30:21)做保护(编辑前空格替换为#看,编辑完后#替换为空格)19   fi20 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.以上两种传参方式可以同时使用

 

转载于:https://www.cnblogs.com/sayhihi/p/7405057.html

你可能感兴趣的文章
Pycharm Error loading package list:Status: 403错误解决方法
查看>>
steps/train_sat.sh
查看>>
TLS 1.0协议
查看>>
java递归的几种用法
查看>>
微信小程序 - 接口更新记录以及解决方案(2018/12/26)
查看>>
转:Linux设备树(Device Tree)机制
查看>>
iOS 组件化
查看>>
python安装win32api pywin32 后出现 ImportError: DLL load failed
查看>>
(转)Tomcat 8 安装和配置、优化
查看>>
(转)Linxu磁盘体系知识介绍及磁盘介绍
查看>>
tkinter布局
查看>>
命令ord
查看>>
利用新浪微博来控制电脑
查看>>
CRC校验程序3:通过窗体程序打开txt文件获取数据源,进行逐字节CRC校验
查看>>
洛谷 P3367 【模板】并查集
查看>>
方法Equals和操作符==的区别
查看>>
我的软件工程师之路,给需要的同学!
查看>>
快速模幂
查看>>
Unity3D_最简单的开始界面_结束界面
查看>>
TCP/IP五层模型
查看>>