Como atualizar no banco de dados mysql do linux usando o script awk / sed / linux-shell?

0

Eu tenho um arquivo de dados chamado 'frequency.txt' em duas colunas, a coluna 1 é 'frequency', é um número que mostra uma repetição da coluna correspondente 2 que possui ids.

Exemplo: -

Dados

frequência, id

 32    329
312    330
320    331
132    332
232    334
 52    336
 42    337
 82    338
 ..    ...     

Os dados acima devem ser atualizados em uma coluna em um banco de dados mysql. São mais de 100 linhas e todos os dias tenho que atualizá-lo. Agora estou usando este comando para atualizá-lo manualmente.

echo ' update table.id_set set 'frequency' = 32 where id =329; '|mysql -B -u username -p -h database.com

Como escrever um script de shell que irá substituir automaticamente o valor de 'frequency' e 'id' no comando echo acima e executá-lo para todas as linhas existentes no frequency.txt

PS: - O número de linhas no frequency.txt será diferente.

    
por CCC 05.10.2018 / 11:30

2 respostas

0

Eu não tenho mysql na mão para testar, mas se puder aceitar várias instruções SQL:

awk '{print "update table.id_set set frequency = "$1" where id = "$2";"}' < input | 
  mysql -B -u username -p -h database.com

Na entrada de exemplo, o comando awk enviaria isso para o comando mysql :

update table.id_set set frequency = 32 where id = 329;
update table.id_set set frequency = 312 where id = 330;
update table.id_set set frequency = 320 where id = 331;
update table.id_set set frequency = 132 where id = 332;
update table.id_set set frequency = 232 where id = 334;
update table.id_set set frequency = 52 where id = 336;
update table.id_set set frequency = 42 where id = 337;
update table.id_set set frequency = 82 where id = 338;
    
por 05.10.2018 / 12:52
1

Você pode usar mysqlimport ou ligar diretamente INFILE DE DADOS DE CARGA declaração sql (via mysql).

mysqlimport não gosta de arquivos de dados de "largura fixa", mas você pode ver Carregando arquivos .txt de largura fixa e espaço delimitado no mySQL para um exemplo de como lidar com eles.

Exemplo

Este exemplo baseia-se na suposição de que a coluna id é a chave primária da tabela id_set .

LOAD DATA LOCAL INFILE '/some/path/data.txt' 
REPLACE INTO TABLE id_set
(@row)
SET frequency = TRIM(SUBSTR(@row,1,7)),
    id = TRIM(SUBSTR(@row,8,50))
;
    
por 05.10.2018 / 12:34