如何使用linuxshell脚本把一个数组传递到awk内部进行处理,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Shell脚本里面怎样把一个数组传递到awk内部
如何使用linuxshell脚本把一个数组传递到awk内部进行处理,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
Shell脚本里面怎样把一个数组传递到awk内部进行处理?
测试环境:
[root]# head -1 /etc/redhat-releaseRed Hat Enterprise Linux Server release 6.5 (SantiaGo)[root]# awk --version | head -1GNU Awk 3.1.7
众所周知,Shell脚本里面把一个普通变量传递给awk是非常简单的,直接用 -v 参数赋值就行了。
str1="Hello World"awk -v str2="$str1" 'BEGIN{print str2}'
但是,要把一个数组传递给awk就不是那么简单的事情了。请看以下三个试验:
简单的数组可以先赋值后split
arr1=(A B C)awk -v arr2="${arr1[*]}" 'BEGIN{split(arr2,arr3," "); print arr3[2]}'
有些情况下很难找到合适的分隔符来进行split,因为某个数组元素可能会包含你想用来作为分隔符的那个字符,这时split之后无法得到希望的结果。所以这个方法不够严谨,尤其是当我们无法预测数组元素可能包含哪些字符的时候。
arr1=(A "B C" D)awk -v arr2="${arr1[*]}" 'BEGIN{split(arr2,arr3," "); print arr3[2]}'
可以借助export命令和awk的ENVIRON默认数组来实现这个功能
arr1=(A "B C" D)for((i=0;i<${#arr1[*]};i++)); do export arr1_m$i="${arr1[$i]}"doneawk 'BEGIN{for(i in ENVIRON)if(i~/arr1_m/)print i "=" ENVIRON[i]}'
我这里只是为了演示功能,所以没有把export变量名的定义和awk内部的字符串匹配写的特别考究,大家可以根据实际情况进行调整(比如添加更多的限制条件等)。
Shell脚本里面把一个数组传递到awk内部进行处理,技术上可行,但不建议在生产环境上使用。
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注编程网操作系统频道,感谢您对编程网的支持。
--结束END--
本文标题: 如何使用linuxShell脚本把一个数组传递到awk内部进行处理
本文链接: https://lsjlt.com/news/256896.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-03-01
2024-03-01
2024-03-01
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0