Математические операции с входными данными и печатью? [закрыто]

Вы не можете отключить его, но можете сдвинуть $2 в $1:

$ set bon jour
$ echo "$1$2"
bonjour

$ shift
$ echo "$1$2"  # $2 is now empty
jour

shift сдвинет все позиционные параметры на единицу шаг ниже. Это обычное дело, например. циклы синтаксического анализа командной строки (которые не используют getopt/getopts) для сдвига позиционных параметров на каждой итерации при многократном изучении значения $1 . Редко требуется сбросить позиционный параметр.

Между прочим, unset принимает переменную name, а не ее значение, поэтому unset $1 фактически сбросит переменную bon. ] (если он был установлен ранее).

0
03.08.2017, 21:29
2 ответа

Для этого вообще не нужен цикл оболочки:

awk '{$(NF+1) = NR==1 ? "Points" : $3*4 + $4*2; print}' OFS='\t' input.txt
Team    Played  Wins    Tied    Points
A       2       1       1       6
B       2       0       1       2
5
28.01.2020, 02:15

На простом bash вы можете написать:

while read -ra fields; do 
    if [[ ${fields[0]} == "Team" ]]; then 
        fields+=("Points")
    else 
        fields+=( $(( 4 * ${fields[2]} + 2 * ${fields[3]} )) )
    fi
    # changes to IFS variable done inside a subshell
    (IFS=$'\t'; echo "${fields[*]}")
done < "$1"
1
28.01.2020, 02:15

Теги

Похожие вопросы