awk - 无法打开文件错误

时间:2015-12-30 10:34:35

标签: file 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:无法打开""输出(没有这样的文件或目录)

原因是什么?

示例输入:

    101010201231000
    101010201AA1000
    101010201AA1000
    101010201AA1000
    303030401AA1000
    303030401321000
    303030401AA1000
    303030401AA1000
    505050601AA1000
    505050601AA1000
    505050601431000
    505050601AA1000
    707070801AA1000
    707070801AA1000
    707070801AA1000
    707070801561000

示例输出:

101010201231000
101010201AA1000
101010201AA1000
101010201AA1000

我给出的错误是:

nawk:超出程序限制:最大字段数= 32767         FILENAME =" awktestor.txt" FNR = 1 NR = 1

1 个答案:

答案 0 :(得分:1)

当你说:

print "Awk Started" >> FILE_STDOUT

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

就好像你会说:

awk 'BEGIN {print 1>>FILE_STDOUT}'

返回

  

awk:cmd。 line:1:fatal:表达式为“>>”重定向为null   字符串值

此外,在第10个和第11个字符中找到23时,您似乎想要匹配一行。然后,将该行与以下3行一起打印。

为此你可以说:

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