Задать вопрос
@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 ....
  • Вопрос задан
  • 133 просмотра
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 3
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


Опять же, будьте осторожны с такими самодельными форматами. Нужно помнить о возможно йнеобходимости экранировать данные.
Ответ написан
Комментировать
sotvm
@sotvm
Умный поймёт, а дураку и так всё равно.
греп для csv/mscl ?
просто сформулируйте вопрос
и загуглите в яндексе ))
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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