如何使用awk使用if语句

如何使用awk使用if语句,awk,Awk,有人能帮忙把上面的shell脚本转换成awk脚本吗 谢谢,这应该可以: IPCHK=$(cat input.txt | awk '/IP/ {print $2}') if [[ $IPCHK =~ 10.* ]] ; then echo " $IPCHK " else echo " IP Not Match " fi awk '/IP/ {print $2,($2~/^10\./?"OK":"IP Not Match")" Line "NR }' input.txt 10.10.10.1 OK

有人能帮忙把上面的shell脚本转换成awk脚本吗

谢谢,

这应该可以:

IPCHK=$(cat input.txt | awk '/IP/ {print $2}')
if [[ $IPCHK =~ 10.* ]] ; then
echo " $IPCHK "
else
echo " IP Not Match "
fi
awk '/IP/ {print $2,($2~/^10\./?"OK":"IP Not Match")" Line "NR }' input.txt
10.10.10.1 OK Line 2
12.10.20.1 IP Not Match Line 5


下面是更多的例子:

awk '/IP/ {print ($2~/^10\./?$2:"IP Not Match") }' input.txt
IP Not Match

PS不要将
cat
与能够读取数据的程序一起使用。

在我看来,您似乎有两个需要匹配的条件,但不知道如何匹配它们

在我真正回答你的问题之前,让我指出regex
10.*
匹配“10.1.2.3”,但也匹配“102.3.4”和“210abcde”。
*
位的意思是“任意字符的任意数量”,它不是您认为的通配符。如果您想使用正则表达式来匹配RFC1918IP地址,则需要更加具体。这应该做到:

IPCHK=$(cat input.txt | awk '/IP/ {print $2}')
if [[ $IPCHK =~ 10.* ]] ; then
echo " $IPCHK "
else
echo " IP Not Match "
fi
awk '/IP/ {print $2,($2~/^10\./?"OK":"IP Not Match")" Line "NR }' input.txt
10.10.10.1 OK Line 2
12.10.20.1 IP Not Match Line 5
所以。。。根据您的示例,只要有错误消息,空的
$IPCHK
变量就可以了,因此类似的方法可能会起作用:

^(10\.[0-9]+|192\.168|172.(1[6-9]|2[0-9]|3[01]))\.[0-9]+\.[0-9]+$ 
或者,您可以实际执行以下两项测试:

IPCHK="$(awk '/^IP 10\./ {print $2}' input.txt)"
if [ -n "$IPCHK" ]; then
  echo " $IPCHK "
else
  echo " IP Not Match "
fi
如果您也希望在awk中显示错误消息,这可能适用于您:

IPCHK="$(awk '$1=="IP" && $2~/10\./ {print $2}' input.txt)"
                       ~~

为了便于阅读,我将其展开,但您可以删除换行符,使其成为一行。

告诉我们如何处理示例输入和预期输出。你不能发布一个不做任何你想做的事情的脚本,并期望我们猜测你想让脚本做什么。我有一个IP地址列表,我需要找出IP以10.*系列开始。刚想到一个使用BEGIN方法的带awk的单行程序。编辑您的问题以提供详细信息(同样,包括示例输入和预期输出),不要尝试将其放在无法格式化的注释中。您是否在
输入
文件中有超过IP的内容。如果是,,您想列出IP不以
10开头的行的行号和IP吗?
@user3834663
IP以10开头。*
可能意味着几件不同的事情之一,因此请确保在创建示例输入文件以提供类似的情况时,您不希望进行匹配,因为匹配所做的事情总是微不足道的想要但很难排除你不想要的。
^(10\.[0-9]+|192\.168|172.(1[6-9]|2[0-9]|3[01]))\.[0-9]+\.[0-9]+$ 
IPCHK="$(awk '/^IP 10\./ {print $2}' input.txt)"
if [ -n "$IPCHK" ]; then
  echo " $IPCHK "
else
  echo " IP Not Match "
fi
IPCHK="$(awk '$1=="IP" && $2~/10\./ {print $2}' input.txt)"
                       ~~
IPCHK="$(awk '
           $1=="IP" {
             if($2~/^10\./) {
               print $2;
             } else {
               print "IP NOT MATCH" > "/dev/stderr";
             }
           }' input.txt)"