AWK如何删除空白行

26

/./ 只会移除第一个条件 { print "a"$0 } 中的空行,我该如何确保脚本移除每个条件中的空行?

awk -F, '/./ { print "a"$0 } NR!=1 { print "b"$0 } { print "c"$0 } END { print "d"$0 }' MyFile

2
awk '/./' MyFileawk NF。http://www.unix.com/shell-programming-scripting/84923-remove-all-blank-lines-shell-awk.html http://www.tek-tips.com/viewthread.cfm?qid=1282604 - ant
我认为现在是时候更改被接受的答案了,但我认为@oliv的回答比得到25个赞的那个答案更好,所以我想给它一些时间来崛起。 - Noumenon
4个回答

76

已经提出的答案的简短形式可以是以下内容:

awk NF file

任何awk脚本都遵循语法condition {statement}。如果没有语句块,当condition不为零时,awk将打印整个记录(行)。

awk中的NF变量保存行中字段的数量。因此,当行不为空时,NF保存正值,触发默认的awk操作(打印整行)。对于空行,NF为零且条件未满足,因此awk不执行任何操作。

请注意,甚至不需要引号,因为这个由两个字母组成的awk脚本不包含任何空格或shell可能会解释的字符。


awk '!/^$/' file

^$ 是匹配空行的正则表达式。使用两个 / 用于告诉 awk 这是一个正则表达式。! 表示逻辑非。


感谢 @oliv。最佳答案。 - user674669

40

从文件中删除空行的Awk命令:

awk 'NF > 0' filename

18

如果你想忽略所有的空行,在脚本开头加入以下代码:

/^$/ {next}

1
将以下条件放在第一个条件中,并使用if语句进行检查,如下所示:
awk -F, '
    /./ { 
        print "a"$0; 
        if (NR!=1) { print "b"$0 } 
        print "c"$0 
    } 
    END { print "d"$0 }
' MyFile

1
选定的答案太长了,有更好的一行代码,比如下面这个 awk NF file - Phemelo Khetho

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接