Как сохранить определенные номера строк и удалить остальные - PullRequest
0 голосов
/ 27 ноября 2018

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

sed -i.bak -e '6d;8d;15d;' file

Как мне добиться обратного.Я хочу сохранить эти строки и удалить остальные.Я хочу сделать это на месте, так как у меня есть огромные файлы, и я бы использовал это как часть более крупного сценария.Я все еще храню резервную копию, так как не хочу испортить свой исходный набор данных.

Ответы [ 3 ]

0 голосов
/ 27 ноября 2018

Решение RavinderSingh13 приятно и использует sed с флагом -n для подавления автоматической печати пространства шаблона.Если вы не хотите использовать этот флаг, вы можете использовать метку и оператор sed-goto:

sed '6b;8b;15b;d;' file

По сути это означает:

  • 6b Если я нахожусь на линии 6, переход к концу
  • 8b Если я на линии 8, переход к концу
  • 15b Если я в строке 15, переходите к концу
  • d Если я еще не выполнял ответвление, удалите пространство шаблона и начните следующий цикл

В этом случае, в отличие от использования флага -n, пространство шаблона всегда печатается в конце цикла.

Если вы хотите использовать awk,Вы можете сделать:

awk '(FNR==6) || (FNR==8) || (FNR==15)' file
0 голосов
/ 27 ноября 2018

Также:

sed -e '6!{8!{15!d;};}'
0 голосов
/ 27 ноября 2018

Как насчет остановки печати для sed и укажите, где вы хотите напечатать строки.

sed -i.bak -n '6p;8p;15p;' Input_file

От man sed:

   -n, --quiet, --silent

          suppress automatic printing of pattern space

   p      Print the current pattern space.
...