【问题标题】:How to check if a file is empty using awk in a bash script?如何在 bash 脚本中使用 awk 检查文件是否为空?
【发布时间】:2014-08-23 12:25:48
【问题描述】:

我正在尝试在 bash 脚本中使用 awk 检查文件是否为空。文件为空的条件如下:如果文件的第一行只有字段值,后跟------(后面没有其他内容),那么它被认为是空的。

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

文件.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{ 会有所帮助

标签: linux bash shell awk scripting


【解决方案1】:
awk 'END{print(NR>2)?"NOT EMPTY":"EMPTY"}'

【讨论】:

  • 甚至awk 'END{print (NR>2?"NOT ":"") "EMPTY"}'
【解决方案2】:

您需要将您的 awk 逻辑放在 END 块中,否则它将为每一行输入执行:

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

【讨论】:

  • 我想将它存储在一个 var 中,但它不允许我这样做。我试过var=awk'...' file.txt,但我一直收到错误,你知道为什么吗?
  • @别名var=$(awk '...' file.txt)。您需要告诉 shell 运行命令并捕获输出。
  • @anubhava 非常感谢! +1
猜你喜欢
  • 2014-08-20
  • 2012-04-15
  • 2022-11-02
  • 1970-01-01
  • 2023-01-20
  • 2017-01-03
  • 1970-01-01
  • 1970-01-01
  • 2019-04-24
相关资源
最近更新 更多