我正在尝试使用 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"