2016-06-13 5 views
0

у меня есть этот скрипт в Баше:Аргументов для изменения значений переменных в Bash скрипте

#!/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 

и я хотел бы задать аргумент, чтобы изменить значение после того, как «» AWK «$ 3>„“в легком пути из моей основной программы, которая будет вызывать этот скрипт.

я прочитал кое-что о getopts, но я не uderstand его на всех

Спасибо большое заранее

+0

Как правило, нет необходимости использовать awk для awk: 'awk | awk | awk'. И вы можете установить переменные с помощью '-v var = xxx':' awk -v my_var = 1234 'BEGIN {print my_var}' ' – andlrc

ответ

0

Самый простой способ, это просто передать аргумент в скрипт:

yourscript.sh 20.0 

Затем в вашем сценарии

#!/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 
... 

и cat|awk|awk|awk, вероятно, можно записать следующим образом:

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

Большое спасибо! в конце я понял, как использовать getopts самостоятельно, и я думаю, что это лучший вариант, потому что мне нужно будет добавить больше аргументов в будущем и, возможно, более практично. – Dani

+0

Я не знал ничего о трубопроводе в awk, спасибо! – Dani