在所附的屏幕上,我有一个数组。
我需要从该数组中获取所有第三个组件。
示例(我现有的数组):
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
答案 0 :(得分:0)
如果只需要第三列,则可以使用cut
命令(请参阅man page):
FILE="$1"
for value in `cat $FILE | cut -d ' ' -f 3`
do
echo "3rd column is $value"
done
答案 1 :(得分:0)
我已经这样设置ARRAY1
(不需要,
来分隔数组中的值):
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
(如果要使用第4个组件,请改用cut -d ' ' -f4
)
通过ARRAY2
检查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
答案 2 :(得分:0)
对我来说,这就像XY problem。
您谈论数组,但您读取了一个文件。如果需要的话,我会将数据放入数组中。
如果需要数组,请将其读取为数组。
$: cat xy.dat # used the two you had in your array that I could copy/paste
SRV WW ZSTG HSM BlackDuck RW
SRV WW ZSDB M204 BlackDuck RW
$: cat xy
#! /bin/env bash
declare -a array1=() array2=()
while read -ra row
do array1+=( "${row[*]}" ) # NOTE: using * makes one string of the row; @ would separate them
[[ -n "${row[3]}" ]] && array2+=( "${row[3]}" )
done < "$1" # don't use capital FILE.
declare -p array1 array2 # show the contents
$: xy xy.dat
declare -a array1=([0]="SRV WW ZSTG HSM BlackDuck RW" [1]="SRV WW ZSDB M204 BlackDuck RW")
declare -a array2=([0]="HSM" [1]="M204")
如果您不是特别需要数组,或者只需要第二个数组,请简化。
$: cat xy
#! /bin/env bash
while read -r one two three four five six
do [[ -n "$four" ]] && array2+=( "$four" )
done < "$1"
declare -p array2
$: xy xy.dat
declare -a array2=([0]="HSM" [1]="M204")
如果您也不特别需要array2,请在阅读时进行所需的任何解析。
祝你好运。