@354a66daaa

Можно ли вывести заголовки столбцов при поиске командой GREP?

Я использую команду grep для поиска в csv файлах.
При поиске мне выдаёт строки в формате:
John Doe; 333-000-000; info@mail.com ....

Но на 1 первой строке в csv есть заголовки столбцов.
Можно ли их как-нибудь выводить при поиске?
Что-бы получилось следующее:
Name: John Doe; Phone: 333-000-000; Email: info@mail.com ....
  • Вопрос задан
  • 81 просмотр
Пригласить эксперта
Ответы на вопрос 4
martin74ua
@martin74ua Куратор тега Linux
Linux administrator
head -n 1 file.csv;grep "info@mail.com" file.csv

например так
Ответ написан
trapwalker
@trapwalker
Программист, энтузиаст
Вы могли бы использовать питон. С помощью pythonpy это удобно делать однострочником вроде:
py "csv.DictReader(sys.stdin)" < x.csv
Но есть два нюанса.
- Вам нужно сохранить после фильтрации первую строчку (заголовок) csv-файла (например как вам в соседнем ответе предложили).
- На выходе у вас будут словари, которые очень похожи на josn.

Все эти нюансы можно легко обойти.
Во-первых, пропадает смысл использовать grep, раз вы и так юзаете питон. Можно фильтровать прямо им примерно так:

Во-вторых, после фильтрации можно вернуть первую строку обратно, как в соседнем ответе.

Второй нюанс фиксится не так элегантно, но вполне понятно:
py "(', '.join([f'{k}: {v}' for k, v in rec.items()]) for rec in csv.DictReader(sys.stdin))" < x.csv


Опять же, будьте осторожны с такими самодельными форматами. Нужно помнить о возможно йнеобходимости экранировать данные.
Ответ написан
Комментировать
@dronmaxman
VoIP Administrator
Можно обернуть в функцию и добавить в bashrc (или что там юзаешь)

Добавить в ~/.bashrc
cgrep() {
head -n 1 $2; grep $1 $2;
}


Обновить окружение
source ~/.bashrc

Выполнить
cgrep "info@mail.com" file.csv
Ответ написан
Комментировать
sotvm
@sotvm
Умный поймёт, а дураку и так всё равно.
греп для csv/mscl ?
просто сформулируйте вопрос
и загуглите в яндексе ))
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы