Eu tentaria algo assim:
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
Desejo conectar-me ao meu banco de dados apenas uma vez para fazer várias SELECT
consultas da seguinte forma:
#!/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)
isso retornará algo assim:
COUNT(*) 3 User user1 user2 user3 IP_Address 192.168.1.17 192.168.1.24 192.168.1.17
Eu consegui obter o COUNT usando o awk da seguinte forma:
numberOfUsers=$(echo $query| awk ' { print $2 } ')
minha pergunta é: como posso usar awk
para obter todas as palavras após a palavra User
de acordo com a contagem e para obter todas as palavras após a palavra IP_Address
de acordo com a contagem também?
A variável NF contém o número de campos, e você pode referenciar um campo usando uma variável ao preceder $ ($ i == $ 4 onde i == 4). Em seguida, faça um loop pelos campos e use uma variável de sinalização para saber quando você atingiu cada tipo de valor desejado:
<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}}}'
Use uma consulta e obtenha os resultados no formato csv, que é muito mais limpo:
SELECT count(*), User, IP_Address from USER_IPTable;
Depois disso, você pode usar o awk para analisar os resultados linha a linha e preencher seus arrays de usuário e ip ou trabalhar diretamente com os dados, seja o que for que você precise fazer.
Se sua intenção é listar usuários e endereços IP e assumir que o MYSQL retorna uma linha por registro de saída, você pode simplesmente citar $query
passado para echo
para evitar que a divisão de palavras perca as novas linhas e grep
dos dados de interesse da saída colunar
echo "$query" | grep -v -x -e 'COUNT(\*)' -e 'User' -e 'IP_Address' |
tail -n +2
user1
user2
..
192.1.1.1
192.3.4.5
..