Я пытаюсь проверить конец своих файлов для проверки ошибок. Я пытаюсь работать с awk, но значения, рассчитанные в awk, не могут быть возвращены в мой bash.Bash: проверить значения в файле
s=0
f=0
for ((i=0;i<num_inf;i++)) do
ii=${inf[$i]}
for ((j=0;j<num_gro;j++)) do
jj=${gro[$j]}
for ((k=0;k<num_tri;k++)) do
kk=${tri[$k]}
awk 'END{x=($2+$8);if($x<10) ((f++)) ;else ((s++))}' $ii/$jj/$kk/out.dat
done
printf '%2s' "$s"
printf '%2s' "$f"
s=0
f=0
done
done
Возвращенных с и п всегда равен 0. Так как есть если-то еще испытание здесь, я надеюсь, по крайней мере, один из S, F возвращает ненулевое значение.
У кого-нибудь есть опыт использования awk? Я новичок в bash и awk. Или у кого-то есть предложение обходить awk/имеет более простое решение?
Спасибо всем.
AWK работает в изоляции, поэтому его переменные не видны колотить. напечатайте значения 's' и' t', когда он достигнет конца файла, и используйте '$ (' ... ')' в bash, чтобы зафиксировать этот результат. – Jasen
Если вы печатаете число из awk, это число может быть прочитано вашим сценарием оболочки, отправив его в команду чтения. – blackpen
Поскольку это защищенная среда, я думаю, вы можете использовать 'eval' следующим образом: ' eval '$ (awk' END {x = ($ 2 + $ 8); if ($ x <10) echo "((f ++)); "else echo" ((s ++)) "} '" $ ii/$ jj/$ kk/out.dat ")" ' – anishsane