2015-04-01 3 views
0

У меня есть BASH-скрипт, который постоянно интерпретирует входящие данные. Я надеялся, если есть способ BASH понять, является ли это комбинацией букв, например, hi, bye bye или номерами 123451.Есть ли способ различать символы и цифры?

Каким будет фрагмент кода?

awk_variables=`echo "$line" | awk -F, '{print $1, $4, $5, $7, $10 }'` 
awk_variables_value_array=($awk_variables)   #turns contents of 'awk_variables' into an array 'awk_variables_value_array' 

^Это часть кода, который делает чтение из ($)line из файла CSV. Здесь здесь может быть «привет» или цифры, если это тот случай, который я не хочу читать. Однако у $4 есть буквы, когда они читаются.

Q: Что бы сценарий выглядеть, если бы это было быть в состоянии отличить геодезическую от букв и цифр?


В идеале: Альтернативный подход мог бы быть, если немного кода может подсчитать, сколько параметров есть в данном ($)line. Если параметры не равны величине x, я не мог ее прочитать и перейти к следующей строке. Вопрос: Каким будет сценарий?

ответ

0

Чтобы разделить линию (здесь, $line) в массив (здесь, ${array[@]}) с использованием , в качестве разделителя:

IFS=, read -r -a array <<<"$line" 

Чтобы увидеть, сколько значений были помещены в массив:

${#array[@]} 

Чтобы увидеть, если конкретный элемент состоит только из цифр:

! [[ ${array[4]} =~ [^0-9] ]] 

(! также может войти в поле [[...]]. Отрегулируйте класс символов, если вы хотите включить отрицательные числа, десятичные точки и т. Д.)

+0

Могу ли я заменить 'array'' awk_variables_value_array'? А также это будет работать 'number_of_values_in_array = $ {# array [@]}' т.е. присваивать переменную '$ {# array [@]}' – 3kstc

+0

@ 3kstc: Это просто имя. Вы могли бы поставить 'the_sky_is_blue_but_its_raining', если хотите. Или 'r'. Вам решать. Важным битом является флаг '-a', что означает« поместить разделенные части в массив со следующим именем ». – rici

+0

Последний вопрос: 'number_of_values_in_array = $ {# array [@]}' это тоже сработает? – 3kstc

Смежные вопросы