Como inserir dados do texto para o mysql? [fechadas]

0

Eu recebo este texto do roteador via ssh. Mas eu quero inserir usuário (fr-XXX) e macadress (F0: 24: 75: 33: 22: 11) para a tabela mysql routerusers.

Flags: M - mac-cookie 
 #   USER             DOMAIN             MAC-ADDRESS       EXPIRES-IN          
 0 M fr-65111111                        F0:24:75:33:22:11 4d23h56m17s         
 1 M fr-x0584444                        50:32:75:33:22:11 4d19h8m43s          
 2 M fr-AA055555                        3C:AB:8E:33:22:11 4d22h17m28s         
 3 M fr-1126666                         90:B6:86:33:22:11 4d19h57m31s           
 ....
 ....
 ....
 ....

Acho que primeiro codifico este arquivo para json do que inserir até que os usuários terminem

    
por Erdem Çetin 24.07.2015 / 22:01

2 respostas

0

Você pode usar este filtro sed para converter sua tabela de texto em objetos json:

cat your_text_file | \
sed -e "s/.*\(fr-\w*\)\s*\([0-9A-F:]*\).*/{"user":\"\",\"mac\":\"\"},/g"

Você receberá objetos como este:

{user:"fr-65111111","mac":"F0:24:75:33:22:11"},
{user:"fr-x0584444","mac":"50:32:75:33:22:11"},
{user:"fr-AA055555","mac":"3C:AB:8E:33:22:11"},
{user:"fr-1126666","mac":"90:B6:86:33:22:11"},

Que você pode, então, processar mais para inserir no banco de dados ou você pode atualizar diretamente o comando sed para gerar a consulta de inserção do sql.

    
por Jakuje 24.07.2015 / 22:41
0

Outra maneira de fazer isso é converter os registros em consultas SQL e importar as consultas SQL para o banco de dados (como você faria com um dump SQL) de uma só vez.

Este comando awk apenas converte os registros em consultas SQL:

awk '/ [0-9]+/ {print "INSERT INTO bar (field1, field2) VALUES (\""$3"\", \""$4"\");"}' inputfile
user@debian:~$ awk '/ [0-9]+/ {print "INSERT INTO bar (field1, field2) VALUES (\""$3"\", \""$4"\");"}' inputfile
INSERT INTO bar (field1, field2) VALUES ("fr-65111111", "F0:24:75:33:22:11");
INSERT INTO bar (field1, field2) VALUES ("fr-x0584444", "50:32:75:33:22:11");
INSERT INTO bar (field1, field2) VALUES ("fr-AA055555", "3C:AB:8E:33:22:11");
INSERT INTO bar (field1, field2) VALUES ("fr-1126666", "90:B6:86:33:22:11");

Usando uma substituição de processo, você pode importar diretamente a saída do comando para o banco de dados usando este comando:

mysql -u root -p foo < <(awk '/ [0-9]+/ {print "INSERT INTO bar (field1, field2) VALUES (\""$3"\", \""$4"\");"}' inputfile)
user@debian:~$ mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 61
Server version: 5.5.44-0+deb8u1 (Debian)

Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> CREATE DATABASE foo
    -> ;
Query OK, 1 row affected (0.00 sec)

mysql> USE foo
Database changed
mysql> CREATE TABLE bar (
    -> id INT(8) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    -> field1 VARCHAR(32) NOT NULL,
    -> field2 VARCHAR(32) NOT NULL
    -> )
    -> ;
Query OK, 0 rows affected (0.01 sec)

mysql> SELECT * FROM bar
    -> ;
Empty set (0.00 sec)

mysql> exit
Bye
user@debian:~$ mysql -u root -p foo < <(awk '/ [0-9]+/ {print "INSERT INTO bar (field1, field2) VALUES (\""$3"\", \""$4"\");"}' inputfile)
Enter password: 
user@debian:~$ mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 69
Server version: 5.5.44-0+deb8u1 (Debian)

Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> USE foo
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> SELECT * FROM bar
    -> ;
+----+-------------+-------------------+
| id | field1      | field2            |
+----+-------------+-------------------+
|  1 | fr-65111111 | F0:24:75:33:22:11 |
|  2 | fr-x0584444 | 50:32:75:33:22:11 |
|  3 | fr-AA055555 | 3C:AB:8E:33:22:11 |
|  4 | fr-1126666  | 90:B6:86:33:22:11 |
+----+-------------+-------------------+
4 rows in set (0.01 sec)

mysql> exit
Bye
    
por kos 25.07.2015 / 12:57