给定一个csv文件,我需要跳过任何空字段的行。 x
字段的数目是固定的,并且已知但很大。
使用简单的NF == x { commands }
会失败,因为NF
是根据分隔符进行计数的,它们的出现可靠且独立于值的出现。
另一方面,遍历所有字段可以成功,但似乎是一种很慢的方法:
{
for ( i=1 ; i<=NF ; i++ ) {
if ( $i == "" ) { next }
else if ( i == NF ) { commands }
}
}
有没有一种快速而优雅的方法来选择没有空字段的行?
注意:
我知道sed
或grep
解决方案在一行的开头/结尾搜索分隔符和两个附加分隔符-这是更复杂的awk
脚本的一部分。 / p>
要选择示例文件的第1行和第4行:
11,12,13,14,15,16
21,22,,24,25,26
31,,33,34,35,36
41,42,43,44,45,46
,52,53,54,55,56
61,62,63,64,65,
答案 0 :(得分:2)
或者不使用字段定义
$ awk '!/(^|,)(,|$)/' file
11,12,13,14,15,16
41,42,43,44,45,46
这也可以用sed
完成。