Как сохранить пробелы в строках при конвертации в массив в bash? - PullRequest
1 голос
/ 26 апреля 2019

В настоящее время я работаю со скриптом bash.У меня есть CSV-файл, где каждая строка выглядит следующим образом:

1,ABC DEF
2,GHI JKL

Я хочу создать массив только со значениями во втором поле, а затем распечатать их.

Мое текущее решениевыглядит следующим образом:

myarr=($(awk -F, '{print $2}' filename.csv))
for i in "${myarr[@]}" 
do
    echo $i
done

Мой вывод выглядит следующим образом:

ABC
DEF
GHI
JKL

Когда мне нужно, чтобы это выглядело так:

ABC DEF
GHI JKL

Мне нужен результатбыть в переменной для будущих операций!

Как мне решить эту проблему?

Ответы [ 3 ]

4 голосов
/ 26 апреля 2019

Если вы хотите значения в массиве оболочки, не используйте awk.Просто используйте цикл, подобный этому:

arr=()
while IFS=, read _ val; do
   arr+=("$val")
done < file

# check array content
declare -p arr
declare -a arr='([0]="ABC DEF" [1]="GHI JKL")'

# loop through array
for i in "${arr[@]}"; do
   echo "$i"
   # or do whatever with individual element of the array
done
3 голосов
/ 26 апреля 2019
mapfile -t myarr < <(awk -F, '{print $2}' filename.csv)
declare -p myarr

Вывод:

declare -a array='([0]="ABC DEF" [1]="GHI JKL")'

См .: help mapfile, help declare

2 голосов
/ 26 апреля 2019

Вы также можете просто прочитать всю строку в массив, затем убрать первое поле.

mapfile -t myarr < filename.csv
myarr=("${myarr[@]#*,}")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...