Удалить строки на основе значений в столбце - PullRequest
0 голосов
/ 13 февраля 2019

Я хотел бы удалить все строки в моем CSV, где в столбце «Владелец» Значением является Цифровой контент Fishbowl.

Вот пример CSV

ID,Name,Function,Media,Owner
415,Sam,Run,Footage,Production
213,Raj,Catch,Footage,Fishbowl Digital Content
214,Jack,Hold,Website,Salvage
256,Jason,Catch,Website,Fishbowl Digital Content

Я пытался

awk -F , '$4 != "Fishbowl Digital Content" {print $0}' Test.csv >TestModified.csv

Но я все еще вижу строки, в которых значение в поле «Владелец» равно «Цифровой контент Fishbowl»

awk -F , '$4 != "Fishbowl Digital Content" {print $0}' Test.csv >TestModified.csv

Вот нужные результаты:

ID,Name,Function,Media,Owner
415,Sam,Run,Footage,Production
214,Jack,Hold,Website,Salvage

Ответы [ 3 ]

0 голосов
/ 13 февраля 2019

Вы также можете использовать grep, если вы соответствуете первому или последнему столбцу.Для последнего столбца, вот фильтр:

grep -v ',"Fishbowl Digital Content"$' file

Если могут быть конечные пробелы, то:

grep -vE ',"Fishbowl Digital Content"[[:space:]]*$' file
0 голосов
/ 13 февраля 2019

Я знаю, что это не awk, но я обнаружил, что способ Миллера (http://johnkerl.org/miller/doc/) очень прост и полезен

mlr --csv filter -x '$Owner=="Fishbowl Digital Content"' inputFile.csv
0 голосов
/ 13 февраля 2019

1-е решение (со значением поля жесткого кодирования): Не могли бы вы попробовать следующее.

awk -F, 'FNR==1{print;next} $NF!="Fishbowl Digital Content"' Input_file

2-е решение (Общее решение без жесткого значения поля): Добавление более общего решения, в котором оно проверяет, какое поле имеет значение Owner, а затем пропустит строки.Это означает, что мы НЕ являемся жестким значением для столбца Owner.

awk -F, 'FNR==1{for(i=1;i<=NF;i++){if($i=="Owner"){val=i}};print;next}  $val!="Fishbowl Digital Content"' Input_file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...