До сих пор у меня довольно длинный сценарий, и мне не удается заставить эту команду awk работать. Я получил это для цикла:Использование переменных и массивов в awk
echo "$numberoflipids" # 1
for ((i=0 ; i<$numberoflipids ; i++))
do
echo "${nol[$i]}" # POPC
echo "$pr" # 5
awk -v lipid="${nol[$i]}" threshold="$pr" '$4~/lipid/&&$NF>threshold{print >"filec";next}{print > "tmp"}' filea && mv tmp fileb
## Also tried this:
# awk '$4~/"'${nol[$i]}'"/&&$NF>"'$pr'"{print >"patch_rmlipids.pdb";next}{print > "tmp"}' bilayer_CG_ordered.pdb && mv tmp patch.pdb
## And this works... (giving the exact values)
# awk '$4~/"POPC"/&&$NF>5{print >"patch_rmlipids.pdb";next}{print > "tmp"}' bilayer_CG_ordered.pdb && mv tmp patch.pdb
done
команда третьего AWK отлично работает для меня ... он ищет колонку 4 в моем filea
для РОРСА, копируют строки, которые превышают 5 в последнем столбце filec
и копирует оставшиеся строки в fileb
.
Я надеюсь, что кто-то из вас найдет время, чтобы прочитать код и, возможно, дать мне несколько советов, каким образом я не смог дать awk эти переменные.
PS: Мои файлы выглядеть следующим образом:
ATOM 624 SC1 SER 288 54.730 23.870 56.950 1.00 0.00
ATOM 3199 NC3 POP 487 50.780 27.750 27.500 1.00 3.18
ATOM 3910 C2B POP 541 96.340 99.070 39.500 1.00 7.00
ATOM 4125 W PW 559 55.550 64.300 16.880 1.00 0.00
(Старое сообщение о команде AWK: bash - check for word in specific column, check value in other column of this line, cut and paste the line to new text file)
Ответ на вопрос Tom Fenech. – Ueffes
-.- sry enter уже отправил комментарий ... Я« пережил намного больше попыток, и я предполагаю, что это невозможно дать awk 2 переменные ... – Ueffes
Совсем нет, вы можете сделать '-va = 1 -vb = 2' проблем. Возможно, вы пытаетесь передать весь массив awk? Если это так, см. Этот вопрос: http://stackoverflow.com/q/5400228/2088135 –