Отсутствует последняя строка в файле - PullRequest
1 голос
/ 01 июня 2019

Используя код ниже.Он не будет копировать последнюю строку в файле.

Я пробовал следующие способы чтения файла.

", в то время как IFS = $ '\ n' read -d ''-r -a myLine "или" while IFS = $' \ n 'read -r -a myLine "

while read -a myLine
do
  for ((i=0;i<"${#myLine[@]}";i++))
  do
    temp_array[$i]+=" ${myLine[$i]}"
  done
done < $1

Файл содержит такие числа, как:

1 2
3 4
5 6

когда эхо используется, чтобы увидеть, что находится в массиве, я получаю

1 2
3 4

, где он падает с последней строки.

Ответы [ 2 ]

1 голос
/ 02 июня 2019

Проблема в том, что в последней строке read попадает в конец файла, а не в конец конца строки (символ новой строки), поэтому он возвращает состояние ошибки и цикл завершается. Но он помещает прочитанное содержимое в переменную массива, поэтому проверьте, чтобы он обработал последнюю строку:

while read -a myLine || [[ ${#myLine[@]} -gt 0 ]]
do

Это очень похоже на решение для read без -a; единственное отличие состоит в том, как проверить непустую строку после последнего перевода строки.

1 голос
/ 02 июня 2019

С Bash 4:

mapfile -t MyArray < "$1"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...