Если вы хотите, чтобы сообщение об ошибке отображалось в выходном файле, вам придется перенаправить поток ошибок в то же место, что и выходной поток.:
/opt/techunix/bin/pdsh.sh -f "$ServersListFile" -c "hostname" >>"$Result" 2>&1
Пробовал с помощью следующих шагов
sh script >scriptout
cat sample.log scriptout|awk -F "," 'BEGIN{sum=0;kum=0;jum=0} OFS =","{sum=sum+$1}{kum=kum+$2}{jum=jum+$3}END{print sum,kum,jum}' > final_out
mv final_out sample.log
Это способ сделать это с помощью GNU awk, где скрипт называется script.sh
, а существующий общий файл называется/tmp/sample.log
:
script.sh|\
cat /tmp/sample.log -|\
awk -F, '{for (f=1;f<=NF;f++) TOT[f]+=$f} END {for (f=1;f<length(TOT);f++) printf TOT[f]","; print TOT[length(TOT)]}' >/tmp/sample1.log
mv -f /tmp/sample1.log /tmp/sample.log
Вывод из script.sh
объединяется (помещается в виде строки под )существующим sample.log
, и эти две строки затем суммируются в awk
и результат используется для заменыsample.log
Это будет работать с любым количеством полей. (Не обязательно должны быть согласованными ). В качестве разделителя установлена запятая, но это можно легко изменить.