根据列中的值删除行

问题描述 投票:1回答:3

我想删除我的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
csv awk
3个回答
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

0
投票

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

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

如果可能有尾随空格,那么:

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

0
投票

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

mlr --csv filter -x '$Owner=="Fishbowl Digital Content"' inputFile.csv
© www.soinside.com 2019 - 2024. All rights reserved.