Это:
[ "${#}" -eq 1 ] || echo "Invalid number of arguments, expected one."; exit 1
не является:
[ "${#}" -eq 1 ] || { echo "Invalid number of arguments, expected one."; exit 1; }
Но вместо этого:
{ [ "${#}" -eq 1 ] || echo "Invalid number of arguments, expected one."; }
exit 1
Ваш сценарий завершается независимо от того, сколько аргументов вы ему передали.
Строка форматирования дляawk
printf()
следует тем же соглашениям, что и для C printf()
, так что в принципе
awk '{T=0; for (i=1;i<=NF;i++) T+=$i; T/=NF; printf "%s%s%6.3f\n",$0,OFS,T}' fileinput > fileoutput
должно работать.
Минимальное изменение, необходимое для вашей текущей попытки, — указать
printf "%s %6.3f\n",$0,T
но я предлагаю разделить $0
и T
, используя фактическое значение разделителя выходного поля OFS
на тот случай, если это не один пробел, а TAB
или что-то еще.