Avec nawk, comment faire la somme de tous les nombres dans les champs $ 1, $ 2 et $ 3?

2

En utilisant nawk, comment résumer tous les numéros $1, $2et les $3champs?

8     6     2

7     3     5

1     9     4

Je veux que le résultat soit somme = 45

Steve
la source
J'ai eu un commentaire, j'ai réalisé que la question était générale. Peut-il s'agir d'un script bash ou voulez-vous un one-liner?
nerdwaller

Réponses:

5

nawk 'BEGIN { sum=0; } {sum += $1 + $2 + $3;} END { printf "%d\n", sum } ' a.in

gt6989b
la source
5

en utilisant awk:

awk '{x+=$0;}END{print x}' RS="[ \n]"  file

Cela fonctionnera quel que soit le nombre de lignes ou de colonnes. En utilisant le séparateur d'enregistrement (RS) comme espace ou nouvelle ligne, chaque valeur est fractionnée en une ligne distincte et peut donc être facilement ajoutée.

Gourou
la source
0

Vous pouvez aussi aller avec coreutils et bc:

<file head -c-1 | tr ' \n' '++'; echo) | bc

Si certaines colonnes doivent être omises, par exemple si l'entrée est comme ceci:

A 8 6 2
B 7 3 5
C 1 9 4

cut peut sélectionner les personnes recherchées:

<file cut -d' ' -f2- | head -c-1 | tr ' \n' '++'; echo) | bc

Sortie dans les deux cas:

45
Thor
la source