希望能够根据变量解析数组并接下来的2个字符
array=( 7501 7302 8403 9904 )
如果var = 73,则所需结果为02
如果var = 75,则所需结果为01
如果var = 84,则所需结果为03
如果var = 99,则期望的结果是04
很抱歉,如果这是一个基本问题,但我尝试过cut和grep的变体,但找不到解决方案。
非常感谢任何帮助。
答案 0 :(得分:2)
您可以使用printf
和awk
:
srch() {
printf "%s\n" "${array[@]}" | awk -v s="$1" 'substr($1, 1, 2) == s{
print substr($1, 3)}' ;
}
然后将其用作:
srch 75
01
srch 73
02
srch 84
03
srch 99
04
答案 1 :(得分:2)
由于bash数组很稀疏,即使在旧版本的bash中没有关联数组(将任意字符串映射为键),你也可以拥有一个常规数组,它只包含你希望映射的数字索引的键。考虑以下代码,它接受您的输入数组并生成该表单的输出数组:
array=( 7501 7302 8403 9904 )
replacements=( ) # create an empty array to map source to dest
for arg in "${array[@]}"; do # for each entry in our array...
replacements[${arg:0:2}]=${arg:2} # map the first two characters to the remainder.
done
这将创建一个看起来像的数组(如果您在上面的代码之后运行declare -p replacements
来转储replacements
变量的描述:
# "declare -p replacements" will then print this description of the new array generated...
# ...by the code given above:
declare -a replacements='([73]="02" [75]="01" [84]="03" [99]="04")'
然后,您可以轻松查找其中的任何条目,作为不需要外部命令的常量操作:
$ echo "${replacements[73]}"
02
...或独立遍历键和相关值:
for key in "${!replacements[@]}"; do
value=${replacements[$key]}
echo "Key $key has value $value"
done
...将发出:
Key 73 has value 02
Key 75 has value 01
Key 84 has value 03
Key 99 has value 04
注释/参考文献:
${arg:0:2}
和${arg:2}
)。