如何向数组中显示的 AWK 结果添加不同的变量?

Posted

技术标签:

【中文标题】如何向数组中显示的 AWK 结果添加不同的变量?【英文标题】:How do I add different variables to an AWK result which is showing in array? 【发布时间】:2022-01-12 23:58:11 【问题描述】:

我有这个来自 awk 的输出:

vfp-10m1
vfp-8m1
vfp-9m1
vfp-10m2
vfp-8m2
vfp-9m2
vfp-10vr
vfp-8vr
vfp-9vr

我怎样才能使每一行都有其唯一的变量?比如 A=vfp-8m1B=vfp-8m2 等等?

【问题讨论】:

为什么要使用单独的变量?如果您有可变数量的输出,请使用数组。 对不起,您能进一步解释一下您的答案吗?我还在学习基本的 bash 为每一行创建一个单独的变量是可能的,但是这些变量以后使用起来很麻烦。看看associative arrays。您可以使用数组元素line[A],而不是发明变量A。根据您要对数据执行的操作,indexed array 也可能是一个选项(即 line[0] 用于第一个元素)。 【参考方案1】:

出于演示目的:

$ cat awk.out
vfp-10m1
vfp-8m1
vfp-9m1
vfp-10m2
vfp-8m2
vfp-9m2
vfp-10vr
vfp-8vr
vfp-9vr

使用mapfileawk 输出加载到名为vars[] 的数组中的一个想法:

mapfile -t vars < awk.out

# NOTE: feeding directly from a `awk` script:

mapfile -t vars < <(awk '1' awk.out)

数组内容:

$ typeset -p vars
declare -a vars=([0]="vfp-10m1" [1]="vfp-8m1" [2]="vfp-9m1" [3]="vfp-10m2" [4]="vfp-8m2" [5]="vfp-9m2" [6]="vfp-10vr" [7]="vfp-8vr" [8]="vfp-9vr")

通过循环访问:

for i in "$!vars[@]"
do
    echo "index=$i ; value=$vars[i]"
done

生成:

index=0 ; value=vfp-10m1
index=1 ; value=vfp-8m1
index=2 ; value=vfp-9m1
index=3 ; value=vfp-10m2
index=4 ; value=vfp-8m2
index=5 ; value=vfp-9m2
index=6 ; value=vfp-10vr
index=7 ; value=vfp-8vr
index=8 ; value=vfp-9vr

【讨论】:

这是一个很好的方法!尽管我有很多主机,并且每个主机都有自己的 Pod 编号,但出于这个原因,我需要一种方法来确定哪些 pod 正在该特定主机上运行,​​然后向它们添加一个变量。我终于通过运行 vmx_n1=$(echo $vmx_list | awk 'print$1') x 10 使它工作,它检测到 pod 的名称和编号。不过后来我使用了 declare 数组,谢谢!【参考方案2】:

如果你的行数不超过字母

awk 'BEGIN i=65 printf("%c=%s\n",i++,$0)' file.txt

否则使用像A0A1、...这样的数字

【讨论】:

以上是关于如何向数组中显示的 AWK 结果添加不同的变量?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Vue.Js 中的变量向数组添加值以制作条形图

shell awk操作如何使结果赋值进数组

如何向Map中添加数据

如何在我的数组中添加货币符号?

awk入门及awk数组相关实战

html中如何让变量乘以10显示结果?