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

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 (снова подсчитываются все строки).

  • grep, awk, sed, печать столбца 2, совпадающая в файле1 и file2 column3
  • sed: совпадение двух строк
  • Как я могу извлечь числа в файле с помощью sed или любого другого инструмента?
  • grep -f patternfile не находит ничего или слишком сильно в зависимости от содержимого шаблона
  • Как удалить строку символов после и до определенного символа?
  • Вставка файла в другой файл с помощью sed
  • Как удалить дубликаты из выходных данных tshark
  • Объединение определенных строк текста перед их модификацией
  • извлекать поля из «хвоста -f» потока syslog
  • Нужна помощь с sed / awk с удалением строки
  • Переключение отдельных строк в список, разделенный запятыми, с цитированными записями
  • sed: игнорировать строку, начинающуюся с пробела для соответствия
  • Interesting Posts

    Удалить дату и время рекурсивно из имен файлов

    Как получить информацию dmidecode без прав root?

    Почему между каждым логическим разделом существует 2048 секторов свободного пространства?

    Удалите все файлы / каталоги, за исключением одного файла

    изменить глубину цвета

    Как запустить vncserver как пользователь (а не root)?

    Изменение размеров окон в i3 с использованием только клавиатуры

    Легко обновляемый поиск неисправностей LiveUSB-дистрибутив

    -bash: unalias: ls: not found

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

    Виртуальная машина, висящая на shudown

    Каков правильный способ запуска контейнера с заданной командой?

    Два дистрибутива linux, grub не обнаруживают другого

    Как передать журнал переменных в качестве аргумента скрипту?

    Вывод цветного скрипта только при вызове из интерактивной оболочки

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