Arrays AWK:检查bash数组中是否存在值

Arrays AWK:检查bash数组中是否存在值,arrays,bash,shell,awk,Arrays,Bash,Shell,Awk,在awk中,我有一个文件,在$5字段中,每行包含一个介于1到16之间的数字。例如: X;X;X;X;1;X;X X;X;X;X;8;X;X X;X;X;X;25;X;X X;X;X;X;5;X;X 我想检查字段$5中的数字,并打印一条与该值相关的消息。例如: 1;in range 8;in range 25;not in range 5;in range 我有下面的代码,但有点不方便 awk -F";" 'OFS";" {if (($5=="

在awk中,我有一个文件,在$5字段中,每行包含一个介于1到16之间的数字。例如:

X;X;X;X;1;X;X
X;X;X;X;8;X;X
X;X;X;X;25;X;X
X;X;X;X;5;X;X
我想检查字段$5中的数字,并打印一条与该值相关的消息。例如:

1;in range
8;in range
25;not in range 
5;in range
我有下面的代码,但有点不方便

awk -F";" 'OFS";" {if (($5=="1" || $5=="2" || $5=="3" || $5=="4" || $5=="5" || $5=="6" || $5=="7" || $5=="8" || $5=="9" || $5=="10" || $5=="11" || $5=="12" || $5=="13" || $5=="14" || $5=="15" || $5=="16") && $5!="") print $5 OFS "in range"}
{if (!($5=="1" || $5=="2" || $5=="3" || $5=="4" || $5=="5" || $5=="6" || $5=="7" || $5=="8" || $5=="9" || $5=="10" || $5=="11" || $5=="12" || $5=="13" || $5=="14" || $5=="15" || $5=="16") && $5!="") print $5 OFS "not in range"}'
因为我创建了一个数组

arr=(1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16)
我尝试实现如下所示的方法,但没有成功:

awk -F";" 'OFS";" {if ($5=="${arr[*]}" && $5!="") print $5 OFS "in range"}
    {if (($5!="${arr[*]}" && $5!="") print $5 OFS "not in range"}'
数组和awk命令都在同一个脚本下。 我不知道用awk怎么做。这里的新手

多谢各位

编辑:如果有办法在awk中使用数组方法,我将不胜感激


编辑2:经过有用的注释后,我得出结论,bash数组不能传递到awk数组中。

如果不需要在此处创建数组,只需在awk中运行一个条件并相应地打印语句即可

awk -F';' '{if($5>=1 && $5<=16){print $5"; in range"} else{print $5";not in range"}}' Input_file

使用大于和小于

awk -F";" '{ if ($5 >= 1 && $5 <= 10) print $5, "In range"; else print $5, "Not in range" }' <file>

看起来你们比我快了30秒:这很简单:我试着在awk中使用数组。范围也可以是A-Z。@AhmetSaidAkbulut,对于您显示的示例,您不需要使用,我相信,这个简单的条件在这里会起作用,干杯。如果您坚持使用数组,您需要首先通过-v标志将数组传递到awk中。请参阅此Q&A,讨论这听起来有多么不容易;或者,如果您将一直使用相同的静态数组,那么您可以在awk中定义数组,例如,在BEGIN{…}块中;但是如果你只有几个连续的范围,那么我可能会调整RavinderSingh13的答案,以包含所需的范围ranges@AhmetSaidAkbulut:您已将数组定义为bash数组。不能将bash数组传递给awk数组。您可以将bash数组写入一个文件,然后将该文件读入bash数组;或者,由于arr只包含数字,您可以将其转换为一个环境变量,所有这些数字用空格分隔,然后在awk内部将此变量的内容拆分为一个awk数组。