Измените столбец, если какое-либо выражение регулярного выражения верно с awk или sed - PullRequest
0 голосов
/ 06 сентября 2018

У меня есть файл (назовем его data.csv), похожий на этот

"123", "456", "ud, h-match", "moredata"

с множеством строк в одном формате и с запятыми.Что мне нужно сделать, это посмотреть на третий столбец и посмотреть, есть ли в нем выражение.В этом случае я хочу знать, имеет ли третий столбец «совпадение» где-либо (что он делает).Если таковые имеются, то я должен заменить весь столбец на что-то еще типа «заменено».Итак, чтобы связать его с примером файла data.csv, я бы хотел, чтобы он выглядел следующим образом.

"123", "456", "replace", "moredata"

В идеале я хочу, чтобы сам файл data.csv был изменен (время имеет существенное значение, поскольку у меня большой файл), но также неплохо, если вы запишите его в другой файл.

Редактировать:

Я пытался использовать awk:

awk -F'","' -OFS="," '{if(tolower($3) ~ "stringI'mSearchingFor"){$3="replacement"; print}else print}' file

, но это ничего не изменило.Если я удаляю часть OFS, то она работает, но разделяется пробелами, а столбцы не заключаются в двойные кавычки.

1 Ответ

0 голосов
/ 06 сентября 2018

В зависимости от ответа на мой вопрос о том, что вы подразумеваете под column, это может быть то, что вы хотите (использует GNU awk для FPAT):

$ awk -v FPAT='[^,]+|"[^"]+"' -v OFS=',' '$3~/match/{$3="\"replaced\""} 1' file
"123","456","replaced","moredata"

Используйте awk -i inplace ..., если хотитевыполните редактирование «на месте».

С любым awk (но немного более хрупким, чем описанный выше, поскольку он оставляет начальный / конечный " в первом и последнем полях и не имеет -i inplace):

$ awk 'BEGIN{FS=OFS="\",\""} $3~/match/{$3="replaced"} 1' file
"123","456","replaced","moredata"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...