Xavier Nayrac

Accro au TDD, rubyiste mais pas que, maker, heureux utilisateur de Vim.
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