AWK删除空行

gen*_*ion 13 linux awk

/./被移除的第一个条件的空行{ print "a"$0 }而已,我怎么会确保脚本删除空行对每个条件?

awk -F, '/./ { print "a"$0 } NR!=1 { print "b"$0 } { print "c"$0 } END { print "d"$0 }' MyFile
Run Code Online (Sandbox Code Playgroud)

小智 31

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

awk 'NF > 0' filename
Run Code Online (Sandbox Code Playgroud)


oli*_*liv 28

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

awk NF file
Run Code Online (Sandbox Code Playgroud)

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

NF变量in awk保存行中的字段数.因此,当该行非空时,NF保持一个正值,触发默认awk操作(打印整行).在空行的情况下,NF为零并且不满足条件,所以awk什么都不做.

请注意,您甚至不需要引用,因为这两个字母awk脚本不包含任何可由shell解释的空格或字符.


要么

awk '!/^$/' file
Run Code Online (Sandbox Code Playgroud)

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


gle*_*man 9

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

/^$/ {next}
Run Code Online (Sandbox Code Playgroud)


Bir*_*rei 1

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

awk -F, '
    /./ { 
        print "a"$0; 
        if (NR!=1) { print "b"$0 } 
        print "c"$0 
    } 
    END { print "d"$0 }
' MyFile
Run Code Online (Sandbox Code Playgroud)

  • 选择的答案太长,有更好的衬里,例如下面的“awk NF file” (2认同)