【问题标题】:How awk NF filename is working?awk NF 文件名是如何工作的?
【发布时间】:2014-06-26 00:35:08
【问题描述】:

我有以下文件:

cat testing.txt
==============
line1 1
line2 2 2


line3 3 3

line4

我可以理解awk 'NF > 0' testing.txt 的工作原理。此命令仅处理每条记录中超过 1 个字段的字段数,因此空行和制表符将被删除。

awk 'NF>0' testing.txt
line1 1
line2 2 2
line3 3 3
line4

但是我无法理解awk NF testing.txt 是如何工作的。它的作用与上述相同。

awk NF testing.txt
line1 1
line2 2 2
line3 3 3
line4

在这种情况下,我没有指定任何条件。它仍然可以正常工作并从每条记录中删除空行和制表符。

我可以在 Web 中看到许多引用,据说我们可以使用此命令从文件中删除空行或制表符。还是看不懂语法。

【问题讨论】:

    标签: bash awk


    【解决方案1】:

    NF 代表Nnumber of Fields。所以每当NF 大于0 时,awk 就解释为True。所以实际上这是这样做的:

    if NF>0  --> True
    if NF==0 --> False
    

    由于awk 的默认行为是{print $0},这意味着它确实:

    if NF>0   --->  True   ---> {print $0}
    if NF==0  --->  False  ---> nothing
    

    所以awk NF file 的意思是:打印所有至少有一个字段的行。这会自动暗示:打印所有非空行。

    【讨论】:

    • 虽然我无法想象它会实际发生的情况,但它可能正在考虑NF!=0,而不是严格意义上的NF>0。不过,负数的字段很可能不是问题... ;-)
    • 是的,你是对的。只是出于好奇,我将把它留在这里,看看 Ed Morton 或其他 awk 大师是否对这个主题提供了更多的启发。不过,我认为这是不可能的:)谢谢@twalberg!
    • NF 变量在读取一行时设置。就像1 导致打印行一样,如果NF 的值为1 或更大(表示非空行,它会转换为awk 1 fileawk 23 file,具体取决于NF 的值) ,因此打印该行。如果该行为空白,NF 的值将是0awk 0 file 不打印。
    • 如果是NF From gawk doc:不允许使用负数;试图引用一个通常会终止程序。 (POSIX 标准没有定义当您引用负字段号时会发生什么。gawk 注意到这一点并终止您的程序。其他 awk 实现可能会有不同的行为。)
    猜你喜欢
    • 2017-10-29
    • 2015-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多