awk-快速选择行而不丢失值的方法

时间:2019-02-04 22:15:09

标签: performance awk scripting

给定一个csv文件,我需要跳过任何空字段的行。 x字段的数目是固定的,并且已知但很大。

使用简单的NF == x { commands }会失败,因为NF是根据分隔符进行计数的,它们的出现可靠且独立于值的出现。

另一方面,遍历所有字段可以成功,但似乎是一种很慢的方法:

{
for ( i=1 ; i<=NF ; i++ ) {
    if ( $i == "" ) { next }
    else if ( i == NF ) { commands }
    }
}

有没有一种快速而优雅的方法来选择没有空字段的行?


注意:

我知道sedgrep解决方案在一行的开头/结尾搜索分隔符和两个附加分隔符-这是更复杂的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,

1 个答案:

答案 0 :(得分:2)

或者不使用字段定义

$ awk '!/(^|,)(,|$)/' file

11,12,13,14,15,16
41,42,43,44,45,46

这也可以用sed完成。