当前位置: 首页 > 编程笔记 >

linux Shell脚本里面把一个数组传递到awk内部进行处理

凌蕴藉
2023-03-14
本文向大家介绍linux Shell脚本里面把一个数组传递到awk内部进行处理,包括了linux Shell脚本里面把一个数组传递到awk内部进行处理的使用技巧和注意事项,需要的朋友参考一下

前段时间和几位同事讨论过一个问题:Shell脚本里面怎样把一个数组传递到awk内部进行处理?

当时没有找到方法。前两天在QQ群里讨论awk的时候,无意间又聊起这个话题。机缘巧合之下找到一个思路,特此分享。

测试环境:

[root]# head -1 /etc/redhat-release
Red Hat Enterprise Linux Server release 6.5 (Santiago)
[root]# awk --version | head -1
GNU Awk 3.1.7

众所周知,Shell脚本里面把一个普通变量传递给awk是非常简单的,直接用 -v 参数赋值就行了。

str1="Hello World"
awk -v str2="$str1" 'BEGIN{print str2}'

但是,要把一个数组传递给awk就不是那么简单的事情了。请看以下三个试验:

1. 简单的数组可以先赋值后split

arr1=(A B C)
awk -v arr2="${arr1[*]}" 'BEGIN{split(arr2,arr3," "); print arr3[2]}'

2. 有些情况下很难找到合适的分隔符来进行split,因为某个数组元素可能会包含你想用来作为分隔符的那个字符,这时split之后无法得到希望的结果。所以这个方法不够严谨,尤其是当我们无法预测数组元素可能包含哪些字符的时候。

arr1=(A "B C" D)
awk -v arr2="${arr1[*]}" 'BEGIN{split(arr2,arr3," "); print arr3[2]}'

3. 可以借助export命令和awk的ENVIRON默认数组来实现这个功能

arr1=(A "B C" D)
for((i=0;i<${#arr1[*]};i++)); do
   export arr1_m$i="${arr1[$i]}"
done
awk 'BEGIN{for(i in ENVIRON)if(i~/arr1_m/)print i "=" ENVIRON[i]}'

我这里只是为了演示功能,所以没有把export变量名的定义和awk内部的字符串匹配写的特别考究,大家可以根据实际情况进行调整(比如添加更多的限制条件等)。

结论:Shell脚本里面把一个数组传递到awk内部进行处理,技术上可行,但不建议在生产环境上使用。

 类似资料:
  • 问题内容: 我们如何在Jenkins管道的Groovy脚本中传递参数? 我已经写了xyz.groovy,它可以很好地加载和执行,但是我想在其中传递参数而不是重复工作。我尝试传递负载’../xyz.groovy’param1param2但没有运气。 xyz.groovy 问题答案: 您是否在用参数调用的Groovy中创建方法?

  • 问题内容: 我正在尝试将数据发送到我的PHP脚本来处理一些东西并生成一些东西。 在我的PHP文件中,我尝试检索专辑名称。虽然当我验证它时,我创建了一个警报以显示什么都没收到,但是我尝试通过 虽然会说undefined:/ 问题答案: 您正在发送POST AJAX请求,因此请在您的服务器上使用来获取值。我也建议您这样编写请求,以确保正确的编码: 或简称为: 如果您想使用GET请求: 或简称为: 现在

  • 问题内容: 我想从另一个Python脚本运行一个Python脚本。我想像使用命令行一样传递变量。 例如,我会跑我的,将通过值(0,1,2,3)的列表迭代第一个脚本,并通过那些到第二脚本,然后,等 我发现了Stack Overflow问题1186789,这是一个类似的问题,但是ars的答案调用了一个函数,在这里我想运行整个脚本,而不仅仅是函数,而balpha的答案则调用了脚本,但没有参数。我将其更改

  • 我正在运行多个批处理脚本,提示用户输入2个输入(每个脚本输入相同的2个)。提示似乎最终来自连接到激活服务器的Java文件,但输入是在cmd窗口而不是Java窗口中输入的。 使用

  • 问题内容: 我需要将HTML转换成Markdown结构的文本。 OBS .:使用PHP和Python进行此操作的快速清晰的方法。 当我使用PHP进行编程时,有人指出 Markdownify 可以完成这项工作,但是不幸的是,代码并未得到更新,实际上 却无法正常工作 。在sourceforge.net/projects/markdownify上有一个“注释:不支持- 您要维护该项目吗?请与我联系!Ma

  • 本文向大家介绍用js通过url传参把数据从一个页面传到另一个页面,包括了用js通过url传参把数据从一个页面传到另一个页面的使用技巧和注意事项,需要的朋友参考一下 用js把数据从一个页面传到另一个页面的层里? 如果是传到新页面的话,你网站基于什么语言开发直接用get或者post获取,然后输出到这个层 通过url传参 如果是HTML页面的话JS传到新页面就window.location.href='