2016-06-13 12 views
0

ich dieses Skript in Bash haben:Argumente Variablenwerte in Bash-Skript ändern

#!/bin/bash 
dir="/home/dortiz/Prueba" 
for i in $dir/* 
do 
cat $i | awk '{print $1" " $2" " $3" " $4"\n " $5}' | \ 
     awk '/gi/{print ">" $0; getline; print}' | \ 
     awk '$3>20.00 {print $0; getline; print;}' \ 
     > "${i}.outsel" 
done   
cd /home/dortiz/Prueba 
mv *.outsel /home/dortiz/Prueba2 

, und ich möchte ein Argument, um den Wert hinter „“ awk ‚$ 3>‚‘auf einfache Art und Weise zu ändern, von meinem Hauptprogramm, das dieses Skript aufrufen wird.

Ich habe etwas über getopts lesen, aber i dont uderstand es auf allen

Vielen Dank im Voraus

+0

Es gibt normalerweise keine Notwendigkeit, awk zu awk: awk | awk | awk. Und Sie können Variablen mit '-v var = xxx' setzen:' awk -v my_var = 1234 'BEGIN {print my_var}' ' – andlrc

Antwort

0

Der einfachste Weg ist nur ein Argument an das Skript übergeben:

yourscript.sh 20.0 

Dann in Ihrem Skript

#!/bin/bash 
value=$1 # store the value passed in as the first parameter. 
dir="/home/dortiz/Prueba" 
for i in $dir/*; do 
    awk '{print $1" " $2" " $3" " $4"\n " $5}' "$i" | 
    awk '/gi/{print ">" $0; getline; print}' | 
    awk -v val="$value" '$3>val {print $0; getline; print;}' > "${i}.outsel" 
    # ^^^^^^^^^^^^^^^ 
done 
... 

und die cat|awk|awk|awk Pipeline kann wahrscheinlich so geschrieben werden:

awk -v val="$value" ' 
    $3 > val { 
     prefix = /gi/ ? ">" : "" 
     print prefix $1 " " $2" " $3" " $4"\n " $5 
    } 
' "$i" > "$i.outsel" 
+0

Vielen Dank! Am Ende habe ich verstanden, getopts selbst zu benutzen und ich denke, es ist eine bessere Option, weil ich in der Zukunft mehr Argumente hinzufügen muss und vielleicht praktischer ist. – Dani

+0

Ich wusste nichts über die Pipeline in Awk, danke! – Dani

Verwandte Themen