我们如何使用 awk 在重要单词后获取多个单词?

Nid*_*dal 5 awk shell-script text-processing

我只想连接到我的数据库一次以执行多个SELECT查询,如下所示:

#!/bin/bash
#Begin Code
query=$(echo "SELECT COUNT(*) from USER_IPTable;
      SELECT User from USER_IPTable;
      SELECT IP_Address from USER_IPTable;" | mysql -u root --password='PASS' MatchingDB)
Run Code Online (Sandbox Code Playgroud)

这将返回类似的东西:

COUNT(*) 3 User user1 user2 user3 IP_Address 192.168.1.17 192.168.1.24 192.168.1.17
Run Code Online (Sandbox Code Playgroud)

我设法通过使用 awk 获得了 COUNT,如下所示:

numberOfUsers=$(echo $query| awk ' { print $2 } ')
Run Code Online (Sandbox Code Playgroud)

我的问题是我如何使用awk这个词后得到的每一个字User根据计数和词后得到的每一个字IP_Address根据计数吗?

小智 5

变量 NF 包含字段的数量,您可以通过在 $ ($i == $4 where i == 4) 之前使用变量来引用字段。然后遍历字段并使用标志变量来了解何时达到了所需的每种类型的值:

<your command> | awk '{for (i=1; i<=NF; i++) {if ($i == "User") {type="user"} else if ($i == "IP_Address") {type="ip"}  else if(type == "user") { print "user value = " $i} else if (type == "ip") { print "ip value = " $i}}}'
Run Code Online (Sandbox Code Playgroud)


Jea*_*ard 3

我会尝试这样的事情:

for i in `seq 1 $numberOfUsers`;
do
    #Will print users
    echo $query | awk ' { print `expr $i + 2` } '
    #Will print ip
    echo $query | awk ' { print `expr $i + $numberOfUsers + 3` } '
done 
Run Code Online (Sandbox Code Playgroud)