У меня есть папка (Транзакции) с сотнями .csv файлов. Я хочу перерыть все файлы CSV для конкретной строки и получить вывод каждой строки, которая содержит ту строку. Предпочтительно вывод в txt файл. Например, скажем, я хочу найти любую запись, которая содержит имя John Doe. В окнах я использовал бы следующее:
FINDSTR /n /i "John.Doe" *.csv >> johndoe.txt
/n
дать мне номер строки/i
игнорировать регистр"."
разделить слова *.csv
искать все файлы, которые заканчиваются .csv, и >>
производить в новый файл, который содержит все данные, которые включают строку (в ту же папку).Я ищу подобную команду для использования в Терминале Ubuntu, который перероет все .csv файлы и произведет любые хиты в txt файл. Я изучил grep и awk, но не знаю, как использовать их. Любая справка ценилась бы.Спасибо.
Бесплатное приложение 'CsvFileSearch' сделает точно, что Вы хотите.
Я изучил grep и awk, но не знаю, как использовать их.
grep документация имеет много примеров. Первый в разделе Usage демонстрирует нечувствительный к регистру поиск:
Вот команда в качестве примера, которая вызывает GNU
grep
:grep -i 'hello.*world' menu.h main.c
...
-i
причины опцииgrep
игнорировать регистр, заставляя это соответствовать строке‘Hello, world!
’, которому это иначе не соответствовало бы.
И если я ищу line number
на вышеупомянутой странице:
-n
--line-number
Prefix each line of output with the 1-based line number within its input file. (-n is specified by POSIX.)
>> foo
и *.csv
обрабатываются оболочкой (вероятно, как Вы ожидали бы). Так:
grep -in "John.Doe" *.csv >> johndoe.txt
Опции как /i
, /n
, и т.д. обычно начинайте с дефисов в мире Unix.