我有一个包含 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。
根据问题中给出的示例 CSV,可以使用
egrep
完成
代码:
egrep -v ', |, $' /your/example.csv
输出:
f1 f2 f3
a, b, c
h, i, j
与任何
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