Script do UNIX para consulta de atualização do LPAD no arquivo cat

0

Eu quero script que irá abrir os dados do arquivo de texto e escrever consulta de atualização para o arquivo e salvar no arquivo SQL que será executado através do cron. Eu preparei o comando, mas está escrevendo a consulta de atualização no RPAD. Abaixo, estão os dados de amostra & comando:

text file data : cat file.txt
123456789
234567891
345678912
456789123

Comando:

cat file.txt | sed 's/$/update table set field where file_number="file.txt"/'> file1.sql

SAÍDA atual:

123456789update table set field where file_number=
234567891update table set field where file_number=
345678912update table set field where file_number=
456789123update table set field where file_number=

SAÍDA esperada:

update table set field where file_number='123456789';
update table set field where file_number='234567891';
update table set field where file_number='345678912';
update table set field where file_number='456789123';
    
por Dharmendra 21.10.2013 / 08:18

1 resposta

0

Pode haver abordagens mais elegantes (no entanto, qualquer uma delas vem à minha mente agora), então vamos nos ater a sed .

  • Por que você não comanda o trabalho como você espera?

    $ corresponde ao fim de linha , por isso sua update table ... string é colocada no final de cada linha.

  • Como melhorar?

    1. Você não precisa de cat ; sed usa um arquivo como argumento também.
    2. Defina a linha inteira como um padrão correspondente ( .* corresponde a tudo, coloque-a em colchetes com escape para fazer referência a ela: \(.*\)
    3. Use a string de comando sql como um substituto e coloque a marca de referência quando apropriado:

      sed "s|\(.*\)|update table set field where file_number=\'\';|" file.txt > file.sql
      

      produzindo

      update table set field where file_number='123456789';
      update table set field where file_number='234567891';
      update table set field where file_number='345678912';
      update table set field where file_number='456789123';
      
por 21.10.2013 / 22:06