Unix para várias variáveis de loop

1

Eu tenho um requisito para extrair o segundo, terceiro e quarto campo de um arquivo aaa.log e produzir uma saída como

- sqlplus -sl dbsnmp/Or8cle@\"COL3:COL4/COL2\"

Entrada:

$ cat aaa.log
aaa:fDb:a0081:1800:f1:dsds
aaa:iDb:a0081:1801:i1:dsds
aaa:pDb:a0081:1802:p1:dsds

Resultado esperado:

sqlplus -sl dbsnmp/Or8cle@\"a0081:1800/fDb\"    
sqlplus -sl dbsnmp/Or8cle@\"a0081:1801/iDb\"
sqlplus -sl dbsnmp/Or8cle@\"a0081:1802/pDb\"

Eu extraí o COL2 em um arquivo:

$ cat aaa.log | cut -d":" -f2 > aaa_i.log
$ cat aaa_i.log
fDb
iDb
pDb

e extraídos COL3 e COL4:

$ cat aaa.log | awk -F: '{print  $3  ":" $4}' > aaa_h_p.log
$ cat aaa_h_p.log
a0081:1800
a0081:1801
a0081:1802

Eu tentei usar o código abaixo.

  set -f
 IFS='
> '
 set -- $( cat aaa_i.log)
for i in 'cat aaa_h_p.log'
do
 printf "%s %s\n" "sqlplus -sl sys/hSys10Nov@\""${i}"/"$1"\""
 done

Ocorrência atual:

sqlplus -sl dbsnmp/Or8cle@\"a0081:1800/fDb\"
sqlplus -sl dbsnmp/Or8cle@\"a0081:1801/fDb\"
sqlplus -sl dbsnmp/Or8cle@\"a0081:1802/fDb\"

Estou obtendo apenas fDb em COL2 no o / p, enquanto quero todos os valores lá. Por favor me ajude a corrigir o código. Mesmo as alterações usando o AWK são bem-vindas.

    
por neha dhawan 27.10.2016 / 18:35

3 respostas

0

Arrays são bons para esse tipo de coisa (especialmente se você não tiver certeza de quantos campos existem)

while IFS=: read -a var; do 
  printf 'sqlplus -s1 dbsnmp/Or8cle@\"%s:%s/%s\"\n' "${var[2]}" "${var[3]}" "${var[1]}"
done < aaa.log
sqlplus -s1 dbsnmp/Or8cle@\"a0081:1800/fDb\"
sqlplus -s1 dbsnmp/Or8cle@\"a0081:1801/iDb\"
sqlplus -s1 dbsnmp/Or8cle@\"a0081:1802/pDb\"
    
por 27.10.2016 / 18:56
4
while IFS=: read a b c d e f;do 
    echo sqlplus -sl dbsnmp/Or8cle@\"$c:$d/$b\" 
done < aaa.log 
    
por 27.10.2016 / 18:46
0

Tente abaixo a solução awk -

vipin@kali:~$ awk 'BEGIN{FS=":"}{print v1$3,$4v2$2v3}' v1='sqlplus -sl dbsnmp/Or8cle@\"' v2='/' v3='\"' OFS=":" kk.txt
sqlplus -sl dbsnmp/Or8cle@\"a0081:1800/fDb\"
sqlplus -sl dbsnmp/Or8cle@\"a0081:1801/iDb\"
sqlplus -sl dbsnmp/Or8cle@\"a0081:1802/pDb\"

FS, OFS = separadores de campo. v1, v2, v3 = variáveis para imprimir sentenças conforme nossa exigência.

    
por 29.10.2016 / 21:24

Tags