Разбор CSV для создания хэш-таблицы в Bash приводит к неожиданным функциональным возможностям - PullRequest
0 голосов
/ 15 октября 2019

Я ссылаюсь Как определить хэш-таблицы в Bash? для моей работы. Я пытаюсь проанализировать файл dict.csv , содержащий тестовые данные, например:

1,orange
2,apple
3,banana sandwich
4,grape juice
5,strawberry

И с помощью решения Bash 4 создаю словарь ключ / значение. Вот мой текущий код (обратите внимание, что ключ / значение в то время как инвертировано, это намеренно):

declare -A dict

fileName="dict.csv"

OIFS=$IFS
IFS=','
while read value key
do
    dict+=( ["$key"]="$value" )
done < $fileName
IFS=$OIFS
echo ${dict["orange"]}
echo ${dict["apple"]}
echo ${dict["banana sandwich"]}
echo ${dict["grape juice"]}
echo ${dict["strawberry"]}

Я бы ожидал, что мой вывод будет:

1
2
3
4
5

Но вместо этого мойвывод:

1
2
3
<blank>
<blank>

Я заметил, что количество пустых строк эквивалентно количеству ключей с пробелами в них (например, banana salad и grape juice). Я предполагаю, что эта проблема связана с моим неправильным пониманием того, как IFS, цикл while и синтаксический анализ в bash работают, но я не могу понять, чего мне не хватает.

Спасибо за любые идеи.

Редактировать: В содержании dict.csv внесена опечатка, теперь 3 содержит banana sandwich, а не banana salad, как указано ранее. Это была опечатка в вопросе, а не в моем коде. Мои извинения.

1 Ответ

0 голосов
/ 15 октября 2019

Я нашел свою проблему. Спасибо за Бармар за то, что указал на это. Мой dict.csv не заканчивался символом новой строки, который вызвал ошибку синтаксического анализа. Были и другие проблемы, но они не связаны с этим вопросом. Спасибо за помощь!

...