#!/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
答案 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