对输入数据进行数学运算并打印?

对输入数据进行数学运算并打印?

我正在尝试使用 bash 脚本按行和列打印数据,如下所示。

#!/bin/bash
while IFS='' read -r line || [[ -n "$line" ]]; do
    echo "$line"
done < "$1" 
{ 
   awk 'BEGIN { print "Points"}
      /Points/ { id = $1; }'
} 

我的 txt 文件如下所示:

Team    Played  Wins    Tied
england     4       3       2
america     9       5       3

终端上的输出应如下所示:

Team    Played  Wins    Tied  Points
england    4        3       2     16
america     9       5       3     26

计算如下:一支球队赢了 1 场比赛,因此获得 4 分,平局则获得 2 分。但我不知道如何进行数学运算所以无法做到。

答案1

为此,您根本不需要 shell 循环:

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

答案2

在普通的 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"

相关内容