Замените определенные строки на значение из предыдущей строки

У меня есть следующий текст:

Source IP,URL 1.1.1.1,example1.com Blank,example2.com 2.2.2.2,example3.com Blank,example4.com Blank,example5.com Blank,example6.com Blank,example7.com 7.7.7.7,example8.com Blank,example9.com Blank,example10.com 

Как я могу заменить «Пустое» на непустое значение над ним и получить следующий результат?

 Source IP,URL 1.1.1.1,example1.com 1.1.1.1,example2.com 2.2.2.2,example3.com 2.2.2.2,example4.com 2.2.2.2,example5.com 2.2.2.2,example6.com 2.2.2.2,example7.com 7.7.7.7,example8.com 7.7.7.7,example9.com 7.7.7.7,example10.com 

3 Solutions collect form web for “Замените определенные строки на значение из предыдущей строки”

Вот решение Perl:

 perl -pe ' $prev=$1 if /^([\d\.]+)/; s/Blank/$prev/' file.txt 

Объяснение:

  • Флаг -p Perl означает «Пройдите через входной файл по строкам и распечатайте каждую строку», -e означает «запустить сценарий, указанный в командной строке».

  • $prev=$1 if /^([\d\.]+)/; : Если строка начинается с ( ^ ) строки чисел ( \d ) и точек \. , сохраните эту строку (IP) как $prev . Итак, когда скрипт читает файл, $prev будет содержать последний найденный IP-адрес.

  • s/Blank/$prev/ : замените строку Blank значением $prev .

 awk -F, '{if ($1 == "Blank") ip=repltext; else {ip=$1; repltext=$1;}; print ip "," $2}' inputfile 

предполагая, что «Source IP, URL» не является частью ввода. Если это изменение

 awk -F, 'NR == 1 {next;}; {if ($1 == "Blank") ... 

Также предполагается, что первая строка данных не содержит «Пусто», а всегда IP-адрес.

Вот идиоматическое решение awk:

 <infile awk '$1 == "Blank" { $1 = p } { p = $1 } 1' FS=, OFS=, 

Вывод:

 Source IP,URL 1.1.1.1,example1.com 1.1.1.1,example2.com 2.2.2.2,example3.com 2.2.2.2,example4.com 2.2.2.2,example5.com 2.2.2.2,example6.com 2.2.2.2,example7.com 7.7.7.7,example8.com 7.7.7.7,example9.com 7.7.7.7,example10.com 
  • Печать текста между многострочными разделителями
  • если условие в bash-скриптинге
  • Удаление определенных строк и дубликатов из текстового файла текстового слова 11gb
  • Сумма файлов из списка файлов
  • Почему заглавные буквы включены в ряд строчных букв в регулярном выражении awk?
  • Возьмите подмножество файла, относящегося к отметке времени
  • Как grep для текста в файле и отображать абзац с текстом?
  • помощь awk для печати из определенного столбца до конца
  • Найдите (и разделите) общие начальные пробелы из файла / трубы
  • Разница между $ 1, $ {1} и $ "1" в awk
  • Фильтрация определенных номеров из нескольких файлов
  • Linux и Unix - лучшая ОС в мире.