我有一个带有标题行的.csv文件,如此;
headerA,headerB,headerC
bill,jones,p
mike,smith,f
sally,silly,p
Run Code Online (Sandbox Code Playgroud)
我想过滤掉headerC列中带有f值的所有记录.
我可以用sed或awk这样做吗?
如果标头不包含仅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
好吧,如果您知道它headerC始终位于第三列,则以下 sed 命令将起作用:
sed -r '/[^,]+(,[^,]+){1},f/ d' < file.csv > filefiltered.csv
以下 awk 命令执行相同的操作:
awk 'BEGIN {FS=","} {if($3 != "f") print}' file.csv
如果你不知道headerC总是在特定的列中,那就有点棘手了。这有效吗?