首页 > 解决方案 > bash中数组的单独元素

问题描述

我有一个数组,在附加的屏幕上。

我需要从这个数组中获取所有第三个组件。

示例(我现有的数组):

array1 = 
 ["SRV WW ZSTG HSM BlackDuck RW", "SRV WW ZSDB M204 BlackDuck RW", etc] 

结果应该是:

array2 = ["HSM", "M204"]

在此处输入图像描述

我现在可以使用它的代码:

FILE="$1"

index=0
while read name; do
    get_group_names_from_file[$index]="$name"
    index=$(($index+1))
done < "${FILE}"

get_group_names_from_file=("${get_group_names_from_file[@]:3}")

for ((a=0; a < ${#get_group_names_from_file[*]}; a++))
do
    echo "${get_group_names_from_file[$a]}"
done

标签: bash

解决方案


我已经ARRAY1这样设置了(不需要 a,来分隔数组中的值):

ARRAY1=("SRV WW ZSTG HSM BlackDuck RW" "SRV WW ZSDB M204 BlackDuck RW")

并以这种方式提取数组值的第三个组成部分:

for (( i=0 ; i<$(echo ${#ARRAY1[*]}) ; i++ )) ; do ARRAY2+=($(echo ${ARRAY1[$i]} | cut -d ' ' -f3)); done

(如果您想拥有第四个组件,请cut -d ' ' -f4改用)

检查ARRAY2via的值printf '%s\n' "${ARRAY2[@]}"


~$ ARRAY1=("SRV WW ZSTG HSM BlackDuck RW" "SRV WW ZSDB M204 BlackDuck RW")
~$ ARRAY2=() ; for (( i=0 ; i<$(echo ${#ARRAY1[*]}) ; i++ )) ; do ARRAY2+=($(echo ${ARRAY1[$i]} | cut -d ' ' -f3)); done
~$ printf '%s\n' "${ARRAY2[@]}"
~$ ZSTG
~$ ZSDB

推荐阅读