AWK - 无法打开文件错误

问题描述:

#!/usr/bin/nawk -f 

# Before lines are processed 
BEGIN { 

print "Awk Started" >> FILE_STDOUT 

# Variables 
rec1="" 
rec2="" 
rec3="" 
rec4="" 
mod=0 
X=23 

} 

NR % 5 != 0 { 
mod=NR%5 
if (mod==1) 
    rec1=$0 
else 
if (mod=2)  
    rec2=$0 
else 
if (mod=3) 
    rec3=$0 
else 
if (mod=4) 
    rec4=$0 

next 
} 

# NR % 5 == 0 
{ 

    if (substr($rec1,9,2)==X || substr($rec2,9,2)==X || substr($rec3,9,2)==X || substr($rec4,9,2)==X) 
{ 
    print rec1 
    print rec2 
    print rec3 
    print rec4 
} 
} 

END { 

    print "Awk Ended" >> FILE_STDOUT 

} 

在运行这应该检查的4块为一个特定的进入和输出它们上面的脚本,我得到这个错误:AWK - 无法打开文件错误

AWK:无法打开“” (没有这样的文件或目录)

是什么原因?

样品输入:

1010102
    101010201AA1000 
    101010201AA1000 
    101010201AA1000 
    303030401AA1000 
00 
    303030401AA1000 
    303030401AA1000 
    505050601AA1000 
    505050601AA1000 
    505050601431000 
    505050601AA1000 
    707070801AA1000 
    707070801AA1000 
    707070801AA1000 
    707070801561000 

示例输出:

1010102
101010201AA1000 
101010201AA1000 
101010201AA1000 

我正在给定的错误是:

NAWK:节目超过极限:字段的最大数目的大小= 32767 FILENAME =“awktestor.txt”FNR = 1 NR = 1

+0

这也将是有趣的,知道什么是这一计划的最终目标,因为我们也许能够找到一个更直接的方法。 – fedorqui

当你说:

print "Awk Started" >> FILE_STDOUT 

要重定向的print输出到文件,其值存储在变量FILE_STDOUT。但是,如果未设置此变量,则awk无法重定向并失败。

这是因为如果你会说:

awk 'BEGIN {print 1>>FILE_STDOUT}' 

它返回

AWK:CMD。行:1:致命的:表达式`>>”重新定向空 字符串值


而且,它似乎是要匹配行时23在第10和第11字符被发现。然后,将该行与以下3行一起打印出来。

对于您可以说:

awk '$1 ~ /^.{9}23/ {c=4} c&&c--' file 
    1010102
    101010201AA1000 
    101010201AA1000 
    101010201AA1000 
+0

谢谢,我在测试过程中将其删除,但后来我得到了这个: nawk:超出程序限制:最大字段数大小= 32767 FILENAME =“awktestor.txt”FNR = 5 NR = 5 ------ On 100行文件,这似乎不正常。 – onlyf

+0

@onlyf这是一个全新的问题。当你在一行中有很多字段时,就会发生这种情况。更新你的awk版本怎么样?你在做什么系统? – fedorqui

+0

该行实际上有一个字段,我会用一些例子编辑一个时刻 – onlyf