Unix für Schleife mit mehreren Variablen

Unix für Schleife mit mehreren Variablen

Ich habe die Anforderung, das 2., 3. und 4. Feld aus einer Datei zu extrahieren aaa.logund die Ausgabe als

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

Eingang:

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

Erwartete Ausgabe:

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

Ich habe COL2 in eine Datei extrahiert:

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

und extrahierte COL3 und COL4:

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

Ich habe versucht, den folgenden Code zu verwenden.

  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

Aktuelle Ausgabe:

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

Ich bekomme nur fDb in COL2 im O/P, obwohl ich dort alle Werte haben möchte. Bitte helfen Sie mir, den Code zu korrigieren. Auch Änderungen mit AWK sind willkommen.

Antwort1

while IFS=: read a b c d e f;do 
    echo sqlplus -sl dbsnmp/Or8cle@\"$c:$d/$b\" 
done < aaa.log 

Antwort2

Arrays eignen sich gut für solche Dinge (insbesondere, wenn Sie nicht sicher sind, wie viele Felder es gibt):

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\"

Antwort3

Versuchen Sie die folgende Awk-Lösung -

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 = Feldtrenner. v1,v2,v3 = Variablen zum Drucken von Sätzen gemäß unseren Anforderungen.

verwandte Informationen