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

  • Замените% 20 пробелом в именах файлов?
  • Как преобразовать часовой пояс в журналы, поскольку они хвостают
  • Убедитесь, что / etc / export содержит правило, используя bash
  • Обработка текста для извлечения полей структуры
  • Печать групп соответствия с grep
  • Поведение POSIX привязок sed и $ regex с многострочными пространствами шаблонов
  • Как удалить дубликаты из выходных данных tshark
  • 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 (снова подсчитываются все строки).

    Interesting Posts

    Как исправить «Dillo HTTPS: Отсутствует сертификат эмитента!»?

    md raid5: «нет действительного суперблока», но mdadm –examine говорит, что все в порядке

    Live USB: как получить доступ к USB-накопителю, загружаемому linux из

    Ширина полосы прокрутки Linux-Firefox

    «Пользовательское и групповое создание» mysql, настройки прав собственности

    Ограничить каталог только одним файлом?

    shell: разделение столбцов с помощью awk-стопов, если найдено не целое число

    Определите, скрыты ли файлы или каталоги

    Максимальный размер отдельного файла в ext3 на таблицах mysql?

    bash: Некоторая проблема при использовании read <<< "$ VARIABLE" в корневом разделе только для чтения. Любые известные обходные пути?

    Установите Java 8 на ARM Nas (Debian Wheezy)

    Помогите прочитать плоский файл в unix и вывести на упрощенный формат csv для импорта в excel

    Ноутбук Dual Boot – адаптер Wi-Fi не распознан / не найден

    Храните ту же ширину среднего столбца в макете ThreeColMid в xmonad

    переупорядочить значения в одном столбце, не затрагивая другие столбцы, используя awk или sed

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