csv文件过滤

Ben*_*Ben 3 awk sed

我有一个带有标题行的.csv文件,如此;

headerA,headerB,headerC
bill,jones,p
mike,smith,f
sally,silly,p
Run Code Online (Sandbox Code Playgroud)

我想过滤掉headerC列中带有f值的所有记录.

我可以用sed或awk这样做吗?

Zso*_*kai 8

如果标头不包含仅f在第三列名称:

sed '/,f$/d' FILE
Run Code Online (Sandbox Code Playgroud)

会做(如果输入结束,则从输入中删除每一行,f).

如果有,我会选择:

sed -n -e '1p;/,[^f]$/p' FILE
Run Code Online (Sandbox Code Playgroud)

(默认情况下不会打印任何内容(-n),但第一行必须1p,如果行以其他字符结尾而不是f... 注意:如果第3列包含多个字符,则不起作用.)

还有awk一个:

awk -F, 'NF == 1 ; NF > 1 && $3 != "f"' FILE
Run Code Online (Sandbox Code Playgroud)

(这总是打印第一行(NF == 1是真的,然后是默认动作,print $0也就是说,然后下一个条件是检查我们是否超过第一行,而第三个字段不是f默认动作......)

HTH


Mic*_*man 3

好吧,如果您知道它headerC始终位于第三列,则以下 sed 命令将起作用:

sed -r '/[^,]+(,[^,]+){1},f/ d' < file.csv > filefiltered.csv

以下 awk 命令执行相同的操作:

awk 'BEGIN {FS=","} {if($3 != "f") print}' file.csv

如果你不知道headerC总是在特定的列中,那就有点棘手了。这有效吗?