сценарии удара - удаляют дублирующиеся строки с меньшим значением

Включая последнюю строку, которую вы должны ввести:

sed -n '/word/,$p'

Это соответствует первому вхождению слова до тех пор, пока последняя строка и выводит все совпадения.

Не включая последнюю строку:

sed '/word/,$!d;$d'

... которая удаляет отрицательные совпадения, а затем удаляет последнюю строку.

И чтобы перейти только от последнего совпадения к последней строке, вам нужно немного постараться:

 sed -e :n -e '/\n.*word/D;N;$q;bn'

Он зацикливается - он никогда не завершает нормальный цикл строки sed , а вместо этого добавляет следующую строку ввода в буфер пространства шаблонов, и b возвращается, чтобы сделать это снова. Но когда у него есть по крайней мере две строки в пространстве шаблонов и последнее соответствует word , он удаляет все в буфере, кроме строки, которая соответствует word . В последней строке он просто завершает и прерывает цикл. Таким образом, печатается все, от последней появившейся строки, содержащей слово , до последней строки.

Хммм ... может быть, я сделал это сложнее, чем должно быть:

sed 'H;$x;/word/h;$!d'

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

1
26.04.2014, 02:47
1 ответ
[113961] Вы можете сделать это с помощью [114441]сортировки[114442]. В дальнейшем, первые порядки [114443] сортируются[114444] в порядке возрастания колонки 1, за которой следует колонка 2. Затем происходит вторая сортировка [114445]сортировки [114446], которая выбирает по одной записи для каждого отдельного значения в столбце 1. Флаг [114447]-s[114448](стабильная сортировка) передается, чтобы обеспечить возврат только первой записи для каждого значения столбца 1, которая благодаря предыдущей сортировке оказывается записью с наименьшим значением в столбце 2. [12148]
1
27.01.2020, 23:52

Теги

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