Ваш первый фрагмент не похож на синтаксис оболочки. Это правильный синтаксис Perl.
Ваш второй фрагмент не использует cutправильно; Я не знаю, что ты намеревался.
В оболочке есть встроенная конструкция разделения строк: когда вы пишете $somevarбез кавычек, оболочка сначала ищет значение переменной somevar, затем разбивает это значение на отдельные слова по символам, указанным в IFS, и, наконец, интерпретирует каждое слово как глобус. шаблон (файл подстановочный знак). Таким образом, вы можете разделить строку, установив IFSсимвол разделителя и временно отключив глобализацию.
set -f; IFS=,
arr=($stats)
set +f; unset IFS
Обратите внимание, что если поле содержит пробелы, элемент массива сохранит этот пробел. Если вы хотите разделить все пробелы и запятые, установите IFS=', '. Обратите внимание, что IFSэто не строка для разделения, а набор символов для разделения; либо пробел или запятая будет составлять разделитель. Кроме того, существуют специальные правила для пробелов: любая последовательность из нуля или более пробелов, за которыми следует запятая, за которой следуют ноль или более пробелов, будет составлять один разделитель, а любая последовательность из одного или нескольких пробелов также будет составлять разделитель.
Если вы хотите удалить только пробел в начале или конце поля, вам придется делать это элемент за элементом.
shopt -s extglob
for ((i=0; i<${#arr[@]}; i++)); do
arr[i]=${arr[i]#+( )} # strip one or more spaces at the beginning
arr[i]=${arr[i]%+( )} # strip one or more spaces at the end
done
awk '{ split("3,aac-lc, 93.8, aaclc, 77.3, h.264, 1024.6, h.264, 1029.1, 31, 31, 0,0,0.000000,31,31,0,0,0.000000,7,0,0,0.000000,30,1280 720,10,0,0,0.000000,30,1280 720 ",arr,","); print arr[1]; }'ИЛИecho "3,aac-lc, 93.8, aaclc, 77.3, h.264, 1024.6, h.264, 1029.1, 31, 31, 0,0,0.000000,31,31,0,0,0.000000,7,0,0,0.000000,30,1280 720,10,0,0,0.000000,30,1280 720" | awk '{ split($0,arr,","); print arr[1]; }'Это должно работать.