根据列中的值删除行

时间:2019-02-13 01:42:32

标签: csv awk

我想删除CSV中“所有者”列下的值为“鱼缸数字内容”的所有行。

这是示例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

但是我仍然看到“所有者”下的值为“鱼缸数字内容”的行

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 :(得分:0)

第一种解决方案(带有硬编码字段值): 请您尝试以下操作。

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

第二个解决方案(不对字段值进行硬编码的通用解决方案): :添加更多通用解决方案,它将检查哪个字段具有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

答案 1 :(得分:0)

如果您要匹配第一列或最后一列,也可以使用grep。对于最后一列,这里是过滤器:

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

如果可能有尾随空格,则:

grep -vE ',"Fishbowl Digital Content"[[:space:]]*$' file

答案 2 :(得分:0)

我知道这不是awk,但我发现Miller方式(http://johnkerl.org/miller/doc/)非常简单且有用

mlr --csv filter -x '$Owner=="Fishbowl Digital Content"' inputFile.csv