@MasterCopipaster

Как найти строки по фильтру в большх файлах?

Здравствуйте, подскажите как составить команду в linux
У меня есть файл который не возможно прочитать в RAM 23GB это по сути sql dump (текстовый)
Мне надо вывести номера всех строк где встречается выражение DROP TABLE IF EXISTS

пример:
в файле 100% есть такая строка
DROP TABLE IF EXISTS `crosses`;
я пытаюсь сделать так:
cat < dump.sql | wc -l | grep -i 'DROP TABLE IF EXISTS' | awk {'print $1'}

Но получаю пустой результат (не нахожу строку) и еще побывал так
cat < dump.sql | wc -l | grep -i 'DROP TABLE IF EXISTS'


Подскажите как мне получить номера строк из файла где встречается подстрока DROP TABLE IF EXISTS?
  • Вопрос задан
  • 115 просмотров
Решения вопроса 1
fox_12
@fox_12
Расставляю биты, управляю заряженными частицами
Как-то странно вы это делаете ...
cat dump.sql | grep 'DROP TABLE IF EXISTS' -n
выведет номер строки и саму строку
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
gedev
@gedev
сисадмин-энтузиаст
Поясню что было не так в вашей команде. Похоже, вы не совсем понимаете принцип конвейера (|).

cat < dump.sql | wc -l | grep -i 'DROP TABLE IF EXISTS' | awk {'print $1'}

Здесь cat < dump.sql делает то, что нужно — печатает весь дамп в STDOUT, но cat не нужно перенаправление вывода (<), поэтому лучше писать так: cat dump.sql.
Затем строка с дампом передаётся в STDIN wc -l. На выходе в STDOUT поступает строка вида 12345. То есть это просто число строк в исходном дампе. Но вы далее в строке 12345 пытаетесь найти вхождения DROP TABLE IF EXISTS c помощью grep. Уже тут получаете пустую строку, а awk показывает результат работы над пустой строкой — новую пустую строку.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы