21

/./仅删除第一个条件的空行,{ print "a"$0 }我将如何确保脚本删除每个条件的空行?

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

4 回答 4

59

已经提出的答案的较短形式可能如下:

awk NF file

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

NF变量 inawk保存行中的字段数。因此,当该行非空时,NF保留一个触发默认操作的正值awk(打印整行)。如果是空行,NF则为零且不满足条件,因此awk什么也不做。

请注意,您甚至不需要引号,因为这个 2 个字母的 awk 脚本不包含任何可以被 shell 解释的空格或字符。


或者

awk '!/^$/' file

^$是空行的正则表达式。需要2/才能awk理解字符串是正则表达式。!是标准否定。

于 2016-07-06T08:10:22.130 回答
39

awk 命令从文件中删除空行:

awk 'NF > 0' filename
于 2012-04-28T00:15:57.903 回答
15

如果您想忽略所有空行,请将其放在脚本的开头

/^$/ {next}
于 2012-04-27T12:04:23.230 回答
1

将以下条件放入第一个条件中,并使用if语句检查它们,如下所示:

awk -F, '
    /./ { 
        print "a"$0; 
        if (NR!=1) { print "b"$0 } 
        print "c"$0 
    } 
    END { print "d"$0 }
' MyFile
于 2012-04-27T09:17:32.597 回答