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
答
当你说:
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
这也将是有趣的,知道什么是这一计划的最终目标,因为我们也许能够找到一个更直接的方法。 – fedorqui