удаление строки из файла с помощью grep или sed, но количество строк все равно одинаково

Я пытаюсь удалить строку из файла с помощью grep -v или sed, но проблема в том, что количество строк в результате остается неизменным после удаления.

$ grep $'\t59116613\t' ../chr/19.TB0002183.all.vcf 19 59116613 . TC 20.3144 . DP=42;VDB=0.566336;SGB=-0.651104;RPB=0.504878;MQB=0.0279668;MQSB=0.943468;BQB=0.362091;MQ0F=0;ICB=1;HOB=0.5;AC=1;AN=2;DP4=21,13,2 $ grep -v $'\t59116613\t' ../chr/19.TB0002183.all.vcf | wc -l 108067 $ wc -l ../chr/19.TB0002183.all.vcf 108067 

  • Как получить код выхода grep, но распечатать все строки?
  • grep искать error_log и отправлять сообщения только по электронной почте, когда результаты будут найдены?
  • Как фильтровать вывод сценария в bash, используя запрос типа «(я ИЛИ вы) ИЛИ (john AND! Doe)»?
  • Как совместить строку, содержащую символ «$» с grep?
  • grep также возвращает не соответствующие строки
  • sed match word1 и word2, чтобы получить слово между ними
  • Как сопоставить текст между строкой и пробелом
  • Трубопровод из находки в grep
  • Как найти / grep, что находится между строкой1 и строкой2?
  • Как обмениваться словами в имени файла с помощью оболочки?
  • разбор файла из ls -laLR
  • Удаление линий, если в пятом столбце есть точка
  • One Solution collect form web for “удаление строки из файла с помощью grep или sed, но количество строк все равно одинаково”

    Когда подсчет строк дает неожиданные результаты, мы должны проверить, понимает ли каждая утилита обработки текста то, что линия одинакова. Обычно это сводится к двум вопросам:

    1) Проблемы с конверсией файлов: какие символы используются в качестве EOL (конец строки aka newline или break)? Это может быть \r , \n или \r\n зависимости от ОС.

    2) Является ли последняя строка также завершена с помощью EOL? Если нет, то как обрабатывают утилиты обработки текста?

    В этом случае второй вопрос привел к объяснению.

    Что подсчитывает wc -l ?

    Непосредственно со страницы man:

    -l, –lines печатать количество новых строк

    Очевидно, что последняя строка не учитывается, если она не заканчивается символом новой строки, т. Е. Результат тогда меньше, чем действительное число строк.

    Что делает grep ?

    grep завершает каждую выходную строку новой строкой. Я не нашел его в документации, только протестировал его.


    Теперь мы можем провести тест, чтобы объяснить поведение, описанное в вопросе:

    1. Давайте создадим тестовый файл с 3 строками, но без задней строки новой строки.

    echo -ne "first\nsecond\nthird" > 3lines.txt

    1. Давайте проверим последний символ:

    tail -1 3lines.txt | od -c

    Хорошо, нет '\ n'.

    1. wc -l < 3lines.txt

    Вывод: 2 (последняя строка не подсчитывается, поскольку последняя строка новой строки отсутствует)

    1. Передайте все строки через grep

    grep . < 3lines.txt | wc -l

    Выходной сигнал равен 3 (подсчитаны все строки, поскольку отсутствует новая строка)

    1. Отфильтруйте только одну строку (это может быть любая строка)

    grep -v first < 3lines.txt | wc -l

    Вывод равен 2 (снова подсчитываются все строки).

    Linux и Unix - лучшая ОС в мире.