добавить несколько строк для диапазона переменной и условного столбца в файл

Использование цикла для такого рода работ не рекомендуется, если только вы не имеете дело с небольшим «нет». строк 1 . Вам лучше использовать диапазоны и пространство удержания:

sed '/Address/,/###/{
/###/!H;/Address/h;/###/!d;x;s/\n//;s/\n/|/g;G
}' infile

То есть для каждой строки в этом диапазоне выполните следующие действия: :если это не последняя строка в диапазоне, добавьте пробел для хранения (перезапишите, если это первая строка в диапазоне )и удалите строку, иначе буферы обмена, удалите первую встроенную новую строку и замените оставшиеся на |. Затем добавьте содержимое буфера хранения в пространство шаблонов.
Это не удастся, если за последним Addressне следует ###, поэтому, чтобы избежать этого, используйте второе условие и удалите, только если это не последняя строка ввода, в противном случае добавьте для удержания буфера, обмена и выхода:

sed '/Address/,/###/{
/###/!H;/Address/h;/###/!{
$!d;H;x;q
}
x;s/\n//;s/\n/|/g;G
}' infile

1 :чем больше строк вам нужно вытащить, тем медленнее это происходит из-за необходимости постоянно проверять пространство шаблонов на соответствие -см. результаты здесь(это другое требование, я знаю, но просто чтобы дать вам представление...)

0
31.07.2019, 16:21
1 ответ

Похоже, вы просите:

awk '{                 
  y = $2; 
  for(z=1;z<=3;z++){
     value = z < $3 ? 0 : z > $4 ? 2 : 1; 
    $2 = y OFS z OFS value; 
    print
  }
}' file

однако я не могу заставить его производить показанный вывод.

3
28.01.2020, 02:22

Теги

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