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)
我会尝试这样的事情:
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)