Разделение элементов массива, который содержит несколько слов и число - PullRequest
0 голосов
/ 26 сентября 2019

У меня есть массив с элементами, которые содержат определенное количество слов, за которыми следуют цифры.Пример: слово1 слово2

for i in "${array[@]}"
do

done

Example:
If array[0] = word1 word2 5
stringarray=word1 word2
valarray=5

Ответы [ 2 ]

0 голосов
/ 26 сентября 2019

Если я правильно понимаю ваши требования, попробуйте следующее:

# example of array[]
array=("word1 word2 5" "word3 6 word4")

for i in "${array[@]}"; do
    for j in $i; do
        if [[ -z ${j//[0-9]} ]]; then       # $j consists of numbers only
            numberarray+=("$j")
        else
            stringarray+=("$j")
        fi
    done
done

# see the results
echo "stringarray: ${stringarray[@]}"
echo "numberarray: ${numberarray[@]}"

Вывод:

stringarray: word1 word2 word3 word4
numberarray: 5 6
0 голосов
/ 26 сентября 2019

В Bash вы можете выполнять сравнение регулярных выражений с помощью расширенной тестовой команды [[ с оператором сравнения регулярных выражений =~.

Не могу сказать, что это лучший способ сделать это,но это, вероятно, самое простое:

array=("word1" "word2" "5" "some words" "123" "00" "the last words")
wordarray=()
numarray=()

for x in "${array[@]}"
do
   # if x contains any non-digit character
   if [[ $x =~ [^0-9] ]]
   then wordarray+=("$x")
   else numarray+=("$x")
   fi
done

for x in "${wordarray[@]}"
do echo "$x"
done

for x in "${numarray[@]}"
do echo "$x"
done

# Outputs:
# word1 / word2 / some words / the last words
# 5 / 123 / 00

Это очень простая стратегия обнаружения, и она не будет отлавливать десятичные или отрицательные числа, но регулярное выражение может быть изменено, чтобы отследить их относительно легко (естьмного вопросов по этому поводу на этом сайте).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...