Operações matemáticas em dados de entrada e impressão? [fechadas]

0

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.

    
por coderforyouman 03.08.2017 / 20:04

2 respostas

5

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
    
por 03.08.2017 / 20:10
1

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"
    
por 03.08.2017 / 20:16