脚本未在awk中执行任何验证步骤

脚本未在awk中执行任何验证步骤,awk,sh,Awk,Sh,此脚本应以csv格式读取,格式如下 Name,Date,ID,Number John Smith,09/05/2015,s,999-999-99 Mike Smith,09/06/2015,s,989-979-99 Fred Smith,09/03/2015,s,781-999-99 第一行是应该跳过的标题。因此,当脚本运行每个.csv文件时,似乎都会移动到GoodFile目录,我认为这是误报,我对第三个验证步骤做了手脚,输入了QE而不是SE(必须是S或E),它甚至没有命中代码

此脚本应以csv格式读取,格式如下

  Name,Date,ID,Number
  John Smith,09/05/2015,s,999-999-99
  Mike Smith,09/06/2015,s,989-979-99
  Fred Smith,09/03/2015,s,781-999-99

第一行是应该跳过的标题。因此,当脚本运行每个.csv文件时,似乎都会移动到GoodFile目录,我认为这是误报,我对第三个验证步骤做了手脚,输入了QE而不是SE(必须是S或E),它甚至没有命中代码?我不知道为什么
for(linenum=1;linenum无需将文件保存在数组中,只需:

awk -F',' '                       
# skip the header and blank lines
NR == 1 || NF == 0 {next}

$1 == "" { fails1++ }
$2 == "" { fails2a++ }
$2 !~ /^(0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])[- /.](19|20)[0-9][0-9]$/) { fails2b++ }
$3 == "" { fails3a++ }
$3 !~ /^[SE]$/ { fails3b++ }
length($4) < 9 || length($4) > 11 { fails4++ }

END {
    if (fails1)  { print "Failed 1st validation"; exit 1 }
    if (fails2a) { print "Failed 2nd a validation"; exit 1 }
    if (fails2b) { print "Failed 2nd b validation"; exit 1 }
    if (fails3a) { print "Failed 3rd a validation"; exit 1 }
    if (fails3b) { print "Failed 3rd b validation"; exit 1 }
    if (fails4)  { print "Failed 4th validation"; exit 1 }

}' "$file"
当文件包含多个错误时,如果您不在乎首先报告哪个错误,则以下是版本:

awk -F',' '

# skip the header and blank lines
NR == 1 || NF == 0 {next}

$1 == "" { print "Failed 1st validation"; exit 1 }
$2 == "" { print "Failed 2nd a validation"; exit 1 }
$2 !~ /^(0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])[- /.](19|20)[0-9][0-9]$/) { print "Failed 2nd b validation"; exit 1 }
$3 == "" { print "Failed 3rd a validation"; exit 1 }
$3 !~ /^[SE]$/ { print "Failed 3rd b validation"; exit 1 }
length($4) < 9 || length($4) > 11 { print "Failed 4th validation"; exit 1 }

' "$file"
awk-F',“
#跳过标题和空行
NR==1 | | NF==0{next}
$1==“{print”第一次验证失败;退出1}
$2==“{print”第二次验证失败;退出1}
$2!~/^(0[1-9]|1[012])[-/.](0[1-9]|[12][0-9]|3[01])[-/.](19 | 20)[0-9][0-9]$/){打印“第二次b验证失败”;退出1}
$3==“{print”第三次验证失败;退出1}
$3 !~ /^[SE]$/{打印“第三次b验证失败”;退出1}
长度($4)<9 | |长度($4)>11{打印“第四次验证失败”;退出1}
“$file”

您不需要将文件保存在数组中,只需:

awk -F',' '                       
# skip the header and blank lines
NR == 1 || NF == 0 {next}

$1 == "" { fails1++ }
$2 == "" { fails2a++ }
$2 !~ /^(0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])[- /.](19|20)[0-9][0-9]$/) { fails2b++ }
$3 == "" { fails3a++ }
$3 !~ /^[SE]$/ { fails3b++ }
length($4) < 9 || length($4) > 11 { fails4++ }

END {
    if (fails1)  { print "Failed 1st validation"; exit 1 }
    if (fails2a) { print "Failed 2nd a validation"; exit 1 }
    if (fails2b) { print "Failed 2nd b validation"; exit 1 }
    if (fails3a) { print "Failed 3rd a validation"; exit 1 }
    if (fails3b) { print "Failed 3rd b validation"; exit 1 }
    if (fails4)  { print "Failed 4th validation"; exit 1 }

}' "$file"
当文件包含多个错误时,如果您不在乎首先报告哪个错误,则以下是版本:

awk -F',' '

# skip the header and blank lines
NR == 1 || NF == 0 {next}

$1 == "" { print "Failed 1st validation"; exit 1 }
$2 == "" { print "Failed 2nd a validation"; exit 1 }
$2 !~ /^(0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])[- /.](19|20)[0-9][0-9]$/) { print "Failed 2nd b validation"; exit 1 }
$3 == "" { print "Failed 3rd a validation"; exit 1 }
$3 !~ /^[SE]$/ { print "Failed 3rd b validation"; exit 1 }
length($4) < 9 || length($4) > 11 { print "Failed 4th validation"; exit 1 }

' "$file"
awk-F',“
#跳过标题和空行
NR==1 | | NF==0{next}
$1==“{print”第一次验证失败;退出1}
$2==“{print”第二次验证失败;退出1}
$2 !~ /^(0[1-9]| 1[012])[-/.](0[1-9]|[12][0-9]|[3[01])[-/.](19 | 20)[0-9][0-9]$/){打印“第二次b验证失败”;退出1}
$3==“{print”第三次验证失败;退出1}
$3 !~ /^[SE]$/{打印“第三次b验证失败”;退出1}
长度($4)<9 | |长度($4)>11{打印“第四次验证失败”;退出1}
“$file”

您不需要将文件保存在数组中,只需:

awk -F',' '                       
# skip the header and blank lines
NR == 1 || NF == 0 {next}

$1 == "" { fails1++ }
$2 == "" { fails2a++ }
$2 !~ /^(0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])[- /.](19|20)[0-9][0-9]$/) { fails2b++ }
$3 == "" { fails3a++ }
$3 !~ /^[SE]$/ { fails3b++ }
length($4) < 9 || length($4) > 11 { fails4++ }

END {
    if (fails1)  { print "Failed 1st validation"; exit 1 }
    if (fails2a) { print "Failed 2nd a validation"; exit 1 }
    if (fails2b) { print "Failed 2nd b validation"; exit 1 }
    if (fails3a) { print "Failed 3rd a validation"; exit 1 }
    if (fails3b) { print "Failed 3rd b validation"; exit 1 }
    if (fails4)  { print "Failed 4th validation"; exit 1 }

}' "$file"
当文件包含多个错误时,如果您不在乎首先报告哪个错误,则以下是版本:

awk -F',' '

# skip the header and blank lines
NR == 1 || NF == 0 {next}

$1 == "" { print "Failed 1st validation"; exit 1 }
$2 == "" { print "Failed 2nd a validation"; exit 1 }
$2 !~ /^(0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])[- /.](19|20)[0-9][0-9]$/) { print "Failed 2nd b validation"; exit 1 }
$3 == "" { print "Failed 3rd a validation"; exit 1 }
$3 !~ /^[SE]$/ { print "Failed 3rd b validation"; exit 1 }
length($4) < 9 || length($4) > 11 { print "Failed 4th validation"; exit 1 }

' "$file"
awk-F',“
#跳过标题和空行
NR==1 | | NF==0{next}
$1==“{print”第一次验证失败;退出1}
$2==“{print”第二次验证失败;退出1}
$2 !~ /^(0[1-9]| 1[012])[-/.](0[1-9]|[12][0-9]|[3[01])[-/.](19 | 20)[0-9][0-9]$/){打印“第二次b验证失败”;退出1}
$3==“{print”第三次验证失败;退出1}
$3 !~ /^[SE]$/{打印“第三次b验证失败”;退出1}
长度($4)<9 | |长度($4)>11{打印“第四次验证失败”;退出1}
“$file”

您不需要将文件保存在数组中,只需:

awk -F',' '                       
# skip the header and blank lines
NR == 1 || NF == 0 {next}

$1 == "" { fails1++ }
$2 == "" { fails2a++ }
$2 !~ /^(0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])[- /.](19|20)[0-9][0-9]$/) { fails2b++ }
$3 == "" { fails3a++ }
$3 !~ /^[SE]$/ { fails3b++ }
length($4) < 9 || length($4) > 11 { fails4++ }

END {
    if (fails1)  { print "Failed 1st validation"; exit 1 }
    if (fails2a) { print "Failed 2nd a validation"; exit 1 }
    if (fails2b) { print "Failed 2nd b validation"; exit 1 }
    if (fails3a) { print "Failed 3rd a validation"; exit 1 }
    if (fails3b) { print "Failed 3rd b validation"; exit 1 }
    if (fails4)  { print "Failed 4th validation"; exit 1 }

}' "$file"
当文件包含多个错误时,如果您不在乎首先报告哪个错误,则以下是版本:

awk -F',' '

# skip the header and blank lines
NR == 1 || NF == 0 {next}

$1 == "" { print "Failed 1st validation"; exit 1 }
$2 == "" { print "Failed 2nd a validation"; exit 1 }
$2 !~ /^(0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])[- /.](19|20)[0-9][0-9]$/) { print "Failed 2nd b validation"; exit 1 }
$3 == "" { print "Failed 3rd a validation"; exit 1 }
$3 !~ /^[SE]$/ { print "Failed 3rd b validation"; exit 1 }
length($4) < 9 || length($4) > 11 { print "Failed 4th validation"; exit 1 }

' "$file"
awk-F',“
#跳过标题和空行
NR==1 | | NF==0{next}
$1==“{print”第一次验证失败;退出1}
$2==“{print”第二次验证失败;退出1}
$2 !~ /^(0[1-9]| 1[012])[-/.](0[1-9]|[12][0-9]|[3[01])[-/.](19 | 20)[0-9][0-9]$/){打印“第二次b验证失败”;退出1}
$3==“{print”第三次验证失败;退出1}
$3 !~ /^[SE]$/{打印“第三次b验证失败”;退出1}
长度($4)<9 | |长度($4)>11{打印“第四次验证失败”;退出1}
“$file”


dataArr[++nr,i]
是一个bug。改为使用内置的
NR
(并适当处理缺少的条目),或将增量移到
for
循环之外。@Tom Fenech能否详细介绍如何使用内置的NR?不确定您的意思我的意思是,
NR
是一个内置变量,其值为当前记录编号,您可以将其用作数组索引的一部分:
dataArr[NR,i]
。这方面的问题是,对于
NR
的某些值,由于
下一个
语句跳过了一些行,因此不会有
dataArr[NR,i]
。要使用它,您必须在
END
块的
for
循环中添加一个空数组元素的检查(检查第一个可能就足够了)。替代方案更简单-只需将
++nr
移动到循环之前,并使用
dataArr[nr,i]
@TomFenech好的,我将使用替代方案,这是您在代码中建议的吗?{++nr(i=1;我只是在
++nr
之间加了一个分号,用于
->
++nr;用于…
。同样,在您发布的脚本中,将
nr=1
更改为
nr==1
以进行比较,而不是赋值。不清楚为什么要将每个文件存储在数组中,并在结尾部分进行验证,而不仅仅是验证g读取文件。
dataArr[++nr,i]
是一个错误。请改用内置的
nr
(并适当处理缺失的条目),或将增量移到
for
循环之外。@Tom Fenech您能详细介绍如何使用内置NR吗?不确定您的意思是
NR
是一个内置变量,其值为当前记录编号,您可以将其用作数组索引的一部分:
dataArr[NR,i]
。问题是,对于
NR
的某些值,由于
next
语句跳过了一些行,因此将不会有
dataArr[NR,i]
。要使用它,您必须在
END
块中的
for
循环中添加一个空数组元素的检查(检查第一个可能就足够了)。替代方案更简单-只需将
++nr
移动到循环之前,并使用
dataArr[nr,i]
@TomFenech好的,我将使用替代方案,这是您在代码中建议的吗?{++nr(i=1;我只是在
++nr
之间加了一个分号,用于
->
++nr;用于…
。同样,在您发布的脚本中,将
nr=1
更改为
nr==1
以进行比较,而不是赋值。不清楚为什么要将每个文件存储在数组中,并在结尾部分进行验证,而不仅仅是验证g当文件被读取时。
dataArr[++nr,i]
是一个