удаление строки из файла с помощью 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 

  • Я хочу найти дубликаты в файле и добавить символ в конец строки в первом совпадении
  • Измените текст в теге, но только тег содержится в определенном блоке XML
  • Как выполнить замену на месте, которая создает только резервные копии файлов, которые были изменены?
  • Как удалить все пробелы между скобками с помощью bash?
  • Как заменить символ во всех файлах .php внутри папки на OS X?
  • Извлеките строки из файла containg From <str1> To <str2>
  • Удалять заголовки и содержимое из плоского файла, если они находятся ниже определенного количества строк
  • Изменение пары ключей значений массива с использованием sed или замены шаблонов или расширения фигурных скобок?
  • 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 - лучшая ОС в мире.