Позволяет говорят, что у меня есть файл CSV как это:
a,b1,12,
a,b1,42,
d,e1,12,
r,12,33,
Я хочу использовать grep для возврата только только строк где третий столбец = 12. Таким образом, это возвратилось бы:
a,b1,12,
d,e1,12,
но нет:
r,12,33,
Какие-либо идеи для регулярного выражения, которое позволит мне делать это?
Вот вариант:
egrep "^([^,]+,){2}12," file.csv
Преимущество состоит в том, что вы можете выбрать поле, просто изменив число, заключенное в фигурные скобки, без необходимости добавлять или вычитать литерал копии выкройки вручную.
когда у вас есть файлы 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"
Я бы сразу перешел к awk, чтобы точно проверить значение
awk -F, '$3 == 12' file.csv
Это и любое решение на основе regexp предполагает, что значения первых двух полей не содержат запятых