Поиск файла CSV Используя Grep

Позволяет говорят, что у меня есть файл CSV как это:

a,b1,12,
a,b1,42,
d,e1,12,
r,12,33,

Я хочу использовать grep для возврата только только строк где третий столбец = 12. Таким образом, это возвратилось бы:

a,b1,12,
d,e1,12,

но нет:

r,12,33,

Какие-либо идеи для регулярного выражения, которое позволит мне делать это?

22
задан David 3 March 2010 в 18:26
поделиться

4 ответа

Вот вариант:

egrep "^([^,]+,){2}12," file.csv

Преимущество состоит в том, что вы можете выбрать поле, просто изменив число, заключенное в фигурные скобки, без необходимости добавлять или вычитать литерал копии выкройки вручную.

4
ответ дан 29 November 2019 в 04:20
поделиться

когда у вас есть файлы csv, где у вас есть отдельные разделители, такие как запятые, используйте подход разделения по полю / разделителям, а не регулярное выражение.Инструменты для разбиения строк, такие как awk, Perl / Python легко справятся с этой задачей (Perl / Python поддерживает модули csv для более сложного синтаксического анализа csv)

Perl,

$ perl -F/,/ -alne  'print if $F[2]==12;' file
a,b1,12,
d,e1,12,

$ awk -F"," '$3==12' file
a,b1,12,
d,e1,12,

или с помощью только оболочки

while IFS="," read a b c d
do
    case "$c" in
        12) echo "$a,$b,$c,$d"
    esac
done <"file"
2
ответ дан 29 November 2019 в 04:20
поделиться

Я бы сразу перешел к awk, чтобы точно проверить значение

awk -F, '$3 == 12' file.csv

Это и любое решение на основе regexp предполагает, что значения первых двух полей не содержат запятых

31
ответ дан 29 November 2019 в 04:20
поделиться
grep "^[^,]\+,[^,]\+,12," file.csv
10
ответ дан 29 November 2019 в 04:20
поделиться
Другие вопросы по тегам:

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