我的shell脚本如下所示
i="10 ID:794 A:TX-SPN S:0"
A=`echo $i | cut -d" " -f 3| cut -d":" -f2` # gives TX-SPN
ID=`echo $i | cut -d" " -f 2|cut -d":" -f2` # gives 794
sZeroCount=`echo $i | cut -d" " -f 1` # gives 10
通过上述命令,我能够获取A,ID,sZeroCount变量的值,因为i的值仅包含一个条目,i的值不限于1,它可能会增加到1000。是否有更好的方法在其中我可以获取这些值。
答案 0 :(得分:1)
带有数组。使用分隔符和i
将字符串:
拆分为数组a
:
i="10 ID:794 A:TX-SPN S:0"
IFS=" :" a=($i)
echo "${a[4]}" # TX-SPN
echo "${a[2]}" # 794
echo "${a[0]}" # 10
使用chepner的错误修正:
i="10 ID:794 A:TX-SPN S:0"
IFS=": " read -a a <<< "$i"
echo "${a[4]}" # TX-SPN
echo "${a[2]}" # 794
echo "${a[0]}" # 10
答案 1 :(得分:1)
使用这段代码,您可以将行转换为适当的关联数组:
declare -A dict
for token in START:$i # choose a value for START that is not a key
do
IFS=: read key value <<< "$token"
dict["$key"]=$value
done
您可以使用declare -p dict
转储结果:
declare -A dict='([A]="TX-SPN" [S]="0" [ID]="794" [START]="10" )'
然后您可以访问内容e。 G。使用这个:echo "${dict[A]}"
TX-SPN
起始值(在您的示例中为10
)可以作为"${dict[START]}"
访问。为START
选择一个在您的输入中不会显示为键的值。
如果您要遍历像$i
这样的许多行,可以这样做:
while read i
do
declare -A dict
# ... add code from above ...
done < input_file
使用关联数组的优点是,您可以通过一种更易于理解的方式访问值,即: e。通过使用键而不是一些任意索引,这些索引很容易混淆,并且在更改代码时需要不断维护。