Xavier Nayrac

Rubyiste accro au TDD, serial blogger, apprenti data scientist, heureux utilisateur de Vim, accordéoniste.
Si vous vous sentez particulièrement généreux, suivez moi sur Twitter.

Remplacer Sed et Awk par Ruby 5: Accéder aux champs/colonnes

| Comments

Niveau : facile

Toujours dans l’optique de remplacer Sed et Awk par Ruby, et après avoir vu les options -p et -l, on voit comment accéder facilement aux différentes colonnes d’un fichier.

Voici le fichier de données tout simple qui va nous servir aujourd’hui:

data.txt
1
2
3
4
5
6
7
8
9
1 a
2 a
3 b
4 a
5 a
6 b
7 b
8 b
9 b

L’objectif est de calculer la somme des valeurs de la 1ère colonne, uniquement quand la 2e colonne affiche a. On pourrait bien sûr splitter la ligne ($_) pour obtenir nos champs, mais il y a plus rapide. En activant l’option -a de la ligne de commande, Ruby va automatiquement splitter chaque lignes du fichier de données dans la variable prédéfinie $F (pour Fields). On n’a donc rien à faire ;) et on peut se concentrer sur les calculs:

test.rb
1
2
3
4
5
BEGIN { total = 0 }

total += $F[0].to_i if $F[1] == "a"

END { puts "Total: #{total}" }
[~]⇒ ruby -an test.rb < data.txt 
Total: 12

À demain.

Articles connexes

Commentaires