如何在bash脚本中使用awk检查文件是否为空?

4

我正在尝试在bash脚本中使用awk检查文件是否为空。一个文件被视为空的条件是:如果一个文件只有第一行带有字段值,然后跟着------(后面再没有别的内容),则它被视为空。

这是那个特殊文件的结构:

file.txt

col1   col2   col3   col4   col5
------

到目前为止,这是我所拥有的:

awk '
    {
      if (NR > 2)
        print "NOT EMPTY"
      else
        print "EMPTY"
    }
' file.txt

我需要的输出是:
EMPTY

我得到的空值是:
EMPTY
EMPTY

我该如何仅输出EMPTY?我知道这可能非常简单,但我找不到任何方法。谢谢!
如果需要进一步解释,请告诉我。
编辑:此外,如果在file.txt中添加了额外的空行,则会为每个额外的行打印EMPTY。是否有更通用的方法来解决这个问题?

{ -> END{ 将会有所帮助。 - Kent
2个回答

6
你需要将awk逻辑放在END块中,否则它会针对每行输入执行一次:
awk '
    END {
      if (NR > 2)
        print "NOT EMPTY"
      else
        print "EMPTY"
    }
' file.txt

我想将它存储在一个变量中,但是它不允许我这样做。我尝试了 var=awk'...' file.txt 但是一直出现错误,你知道为什么吗? - Redson
1
@别名 var=$(awk '...' file.txt)。你需要告诉shell运行命令并捕获输出。 - Etan Reisner
@anubhava 非常感谢!+1 - Redson

6
awk 'END{print(NR>2)?"NOT EMPTY":"EMPTY"}'

3
甚至可以使用awk 'END{print (NR>2?"NOT ":"") "EMPTY"}' - Ed Morton

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