#arrays #string #shell #unix #awk
#массивы #строка #оболочка #unix #awk
Вопрос:
Мой набор данных (data.txt ) выглядит следующим образом [ImageID,SessionID,height1,height2,x,y,обрезка]:
1,0c66824bfbba50ee715658c4e1aeacf6fda7e7ff,1296,4234,194,1536,0
2,0c66824bfbba50ee715658c4e1aeacf6fda7e7ff,1296,4234,194,1536,0
3,0c66824bfbba50ee715658c4e1aeacf6fda7e7ff,1296,4234,194,1536,0
4,0c66824bfbba50ee715658c4e1aeacf6fda7e7ff,1296,4234,194,1536,950
Это набор значений, которые я хочу использовать. Я новичок в сценарии оболочки 🙂 Я читаю файл построчно следующим образом ,
cat $FILENAME | while read LINE
do
string=($LINE)
# PROCESSING THE STRING
done
Теперь, в приведенном выше коде, после получения строки, я хочу сделать следующее :
1. Разделите строку на значения, разделенные запятыми.
2. Сохраните эти переменные в массивах, таких как ImageID[], SessionID[] .
Мне нужно получить доступ к этим значениям для обработки изображений с помощью imagemagick. Однако я не могу правильно выполнить вышеуказанные шаги
Ответ №1:
set -A
у меня не работает (вероятно, из-за более старого BASH на OSX)
Публикация альтернативного решения с использованием read -a
на случай, если оно кому-то понадобится:
# init all your individual arrays here
imageId=(); sessionId=();
while IFS=, read -ra arr; do
imageId =(${arr[0]})
sessionId =(${arr[1]})
done < input.csv
# Print your arrays
echo "${imageId[@]}"
echo "${sessionId[@]}"
Комментарии:
1. Аккуратное решение, удовлетворяющее большинству моих требований! Большое спасибо!
2. Не могли бы вы создать заголовок цикла
while IFS=, read -ra arr; do
и избавиться от следующей строки?3. Кажется, что строка инициализации
imageId=(); sessionId=();
также не нужна. (Хотя это не повредит!)
Ответ №2:
oIFS="$IFS"; IFS=','
set -A str $string
IFS="$oIFS"
echo "${str[0]}";
echo "${str[1]}";
echo "${str[2]}";
вы можете разделить и сохранить следующим образом
посмотрите здесь, чтобы узнать больше о массивах Unix.
Комментарии:
1. Хорошо, итак, вы разделяете строку и сохраняете их в массиве. Как мне сохранить объекты в разных массивах. Я хочу создать массивы ImageID, SessionID и т. Д. Не могли бы вы, пожалуйста, изменить свой код?
2. Большое спасибо за помощь!
3.
set -A
у меня не работает (нет-A
возможностиset
). Страница, на которую вы ссылаетесь, используетdeclare
.