Чтение набора строк из файла

Следующий шаг решил вашу проблему

Шаг 1: создайте каталог данных (в соответствии с переменной PGROOT, установленной ранее в конфигурационном файле)

sudo mkdir /var/lib/postgres/data

Шаг 2: установите права собственности на /var/lib/postgres/data пользователю 'postgres'

chown postgres /var/lib/postgres/data

Шаг 3: От имени пользователя 'postgres' запустите базу данных.

sudo -i -u postgres
initdb  -D '/var/lib/postgres/data'

Шаг 4: Запустите службу от имени root

1
03.07.2017, 14:22
4 ответа

Упрощенно:

while read -r one
do 
  read -r two && 
  read -r three && 
  read -r four && 
  read -r five && 
  read -r six && 
  read -r seven && 
  read -r eight && 
  read -r nine && 
  read -r ten && 
  printf "%s\n" "$one" "$two" "$three" "$four" "$five" "$six" "$seven" "$eight" "$nine" "$ten"
  ## or whatever you want to do to process those lines
  echo END OF SECTION 
done < input-file

Это может быть "легко" расширено до двадцати строк за раз.

0
28.01.2020, 00:52

Это сработает:

while read line1 && [do something with $line1]
do
    read line2 && [do something with $line2]
    read line3 && [do something with $line3]
    […]
done < file.txt

Однако очень странно иметь ограничение на чтение ровно N строк, если ваша структура данных не является фиксированным числом строк. Обычно то, что делается при чтении нескольких строк за раз, представляет собой своего рода параллелизм, который лучше достигается с помощью либо xargs(для обработки нескольких переменных $lineNв одной команде) , parallel(чтобы использовать рабочую модель для обработки линий как можно скорее) или их комбинацию.

0
28.01.2020, 00:52

Вы можете сделать следующее, чтобы прочитать 5 строк:

N=5; # Number of lines to process together (YMMV)
cat input_file |
while IFS= read -r v1; do
   eof=
   for i in $(seq 2 "$N"); do
      IFS= read -r "v$i" || { unset -v eof; break; }
   done
   ${eof+:} break
   echo "The 5 lines read in are: $v1 $v2 $v3 $v4 $v5"
done
0
28.01.2020, 00:52

Мы можем разбитьи отфильтровать файл...

split -l 20 --filter='command'  input_file

Пример: разделить на части по 20 строк и выбрать одну случайную строку из каждой части (shuf -n 1)

split -l 20 --filter='shuf -n 1' input_file

Команда sama (split) может использоваться для создания файла для каждого фрагмента:

split -l 20 input-file input-file-chunk-

создание входного-файла-чанка-aanput-файла-чанка-abи т. д.

0
28.01.2020, 00:52

Теги

Похожие вопросы