如果一列或多列为空则过滤行

问题描述 投票:0回答:2

我有一个包含 3 列的 CSV,如果一行在最后两列中的任何一列中具有空值,则应该对其进行过滤。我正在尝试在 Linux 中创建一个脚本,给定两个参数,一个 txt 文件和一个数字,提取列表中数字的倍数并将它们相加。

f1 f2 f3
a, b, c
d,  , e
f, g, 
h, i, j

我试过:

cut d"," -f2.3 file.csv | grep -v ",,"

cut d"," -f2.3 file.csv | grep .

但是第一个不会过滤任何东西,第二个只有在我剪切单个列时才有效。

它应该是这样的:

f1 f2 f3
a, b, c
h, i, j

我不会用awk。

linux bash shell scripting
2个回答
0
投票

根据问题中给出的示例 CSV,可以使用

egrep

完成

代码:

egrep -v ',  |, $' /your/example.csv

输出:

f1 f2 f3
a, b, c
h, i, j

0
投票

与任何

awk

$ awk 'NF==3' file
f1 f2 f3
a  b  c
h  i  j

如果真的是逗号分隔,使用

-F,
:

$ awk -F, 'NF==3' file

perl

$ perl -ane 'print if @F == 3' file
f1 f2 f3
a  b  c
h  i  j

$ perl -F, -ane 'print if @F == 3' file

仅使用 shell 循环:

$ 当 IFS= 时,读取 c1 c2 c3;做 [[ $c3 ]] && echo "$c1 $c2 $c3" 完成< file

f1 f2 f3
a, b, c
h, i, j
© www.soinside.com 2019 - 2024. All rights reserved.