Скопируйте значение вышеупомянутой строки в 1-й столбец для строк, соответствующих шаблону - PullRequest
1 голос
/ 29 мая 2019

Предположим, у меня есть | отдельный текстовый файл, например:

123|col 2 row 1|col 3 row 1
xxx|col 2 row 2|col 3 row 2
xxx|col 2 row 3|col 3 row 3
789|col 2 row 4|col 3 row 4
xxx|col 2 row 5|col 3 row 5
xxx|col 2 row 6|col 3 row 6

Используя sed или awk, как получить это:

123|col 2 row 1|col 3 row 1
123|col 2 row 2|col 3 row 2
123|col 2 row 3|col 3 row 3
789|col 2 row 4|col 3 row 4
789|col 2 row 5|col 3 row 5
789|col 2 row 6|col 3 row 6

Если значение столбца 1 равно «xxx», его следует заменить на значение в строке выше.

Ответы [ 2 ]

2 голосов
/ 29 мая 2019
$ awk 'BEGIN{FS=OFS="|"} {if ($1=="xxx") $1=p; else p=$1} 1' file
123|col 2 row 1|col 3 row 1
123|col 2 row 2|col 3 row 2
123|col 2 row 3|col 3 row 3
789|col 2 row 4|col 3 row 4
789|col 2 row 5|col 3 row 5
789|col 2 row 6|col 3 row 6
1 голос
/ 30 мая 2019

Это может сработать для вас (GNU sed):

sed -E 'N;s/^(([^|]*).*\n)xxx/\1\2/;P;D' file

Добавить следующую строку к текущей строке и, если эта добавленная строка начинается xxx, заменить эту строку первым полем текущей строки. Распечатать / удалить текущую строку и повторить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...