Как читать файл построчно в переменную без цикла - PullRequest
0 голосов
/ 31 мая 2018

Итак, вы знаете это правильно ?: Чтение файла построчно, присваивая значение переменной

Как вы это делаете без цикла, я нахожусь в ситуации, когдаЦиклы могут привести к ошибкам и путанице. (Если вы когда-нибудь пытались связываться с параллелью) Но мне все равно нужно читать файл построчно.

Есть ли способ сделать это без цикла?xargs?awk?parallel

Ответы [ 4 ]

0 голосов
/ 01 июня 2018

Немного неясно, о чем вы спрашиваете.Может быть, вы просто спрашиваете:

myvar="$(cat thefile)"
0 голосов
/ 31 мая 2018

Вопрос на самом деле не имеет большого смысла для меня, но вы, безусловно, можете сделать:

{
read line_one <&3; # Read from the input file
echo "The first line is $line_one"
read line_two -u 3;  # A different method to read
echo "The second line in $line_two"
...
} 3< input file

Обратите внимание, что на самом деле нет необходимости читать с fd 3, но гораздо безопаснее, если ваши командыне читает из того же ввода, что и чтение.

Но если вы действительно «в ситуации, когда циклы приводят к ошибкам и беспорядку», у вас есть проблема, для которой это не решение.

0 голосов
/ 31 мая 2018

FWIW, используя рекурсивную функцию (ну, рекурсия может быть циклом ...).Сначала тестовый материал:

$ seq 1 4 > file

, затем функция fun:

$ fun() {
    if read -r line <&5      # read from defined FD 5
    then 
        echo process $line   # process the lines here
        fun                  # recursive function call
    fi
}

, требующая fun:

$ exec 5< file
$ fun
process 1
process 2
process 3
process 4
$ exec 5<&-                  # close the FD
0 голосов
/ 31 мая 2018

Используйте readarray, чтобы прочитать весь файл в переменную массива.Каждая строка будет элементом массива.

readarray -t arrayname < filename
...