Você não precisa de um loop de shell para isso:
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
Estou tentando imprimir dados em linhas e colunas usando o script bash da seguinte forma.
#!/bin/bash
while IFS='' read -r line || [[ -n "$line" ]]; do
echo "$line"
done < "$1"
{
awk 'BEGIN { print "Points"}
/Points/ { id = $1; }'
}
Meu arquivo txt é assim:
Team Played Wins Tied
england 4 3 2
america 9 5 3
A saída no terminal deve ser assim:
Team Played Wins Tied Points
england 4 3 2 16
america 9 5 3 26
Aqui está o cálculo de um time que venceu 1 partida e recebeu 4 pontos e, para um empate, 2 pontos são concedidos. Mas eu não sei como realizar operações matemáticas tão incapazes de fazer.
Você não precisa de um loop de shell para isso:
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
No bash simples, você poderia escrever:
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"
Tags bash text-processing scripting