如何向数组中显示的 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-8m1
和 B=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
使用mapfile
将awk
输出加载到名为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
否则使用像A0
、A1
、...这样的数字
【讨论】:
以上是关于如何向数组中显示的 AWK 结果添加不同的变量?的主要内容,如果未能解决你的问题,请参考以下文章