Здесь есть две проблемы.
(1) ваш способ поиска столбца 12 не будет работать ни в каких строках, в которых есть ячейки, содержащие запятые. И это трудно решить, если вы не знаете, кто написал CSV-файл. Поскольку единого CSV spe c не существует, существует несколько способов избежать запятых и кавычек в файлах CSV. Например, в одном spe c запятая в ячейке экранируется с помощью backsla sh (например, имя моего врача может быть записано как Dr. Bob\, MD
. В другом - любое значение ячейки который содержит запятую, необходимо заключить в двойные кавычки, а сами двойные кавычки должны быть записаны как две двойные кавычки (так, "Dr. Bob, MD"
).
Но если по какой-то причине вы случайно знаете, что встроенные запятые в значениях ячеек не являются проблемой в вашем файле CSV, вы можете игнорировать это.
(2) Это выражение также допускает некоторые другие значения, такие как 201 или 20000B, которые вы не используете не хочу. Так что, если вы знаете, что это не последний столбец, вы можете просто добавить запятые после вариантов:
([2-9][0-9]|1[0-9][0-9]|200),
И если вы не можете сделать это предположение, вы можете просто посмотреть для запятой ИЛИ в конце строки:
([2-9][0-9]|1[0-9][0-9]|200)(,|$)
И, наконец, вы можете использовать «повтор», чтобы указать ровно 11 экземпляров шаблона [^,]*,
. Итак, теперь ваша команда grep выглядит так:
grep -E "^([^,]*,){11}([2-9][0-9]|1[0-9][0-9]|200)(,|$)" file.csv > sc1_d.csv