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 6: Séparateur de champ

| Comments

Niveau : facile

Aujourd’hui on voit comment changer le séparateur de champ à l’aide de l’option -F.

Reprenons le fichier de données du dernier article, ajoutons un séparateur de champ, par exemple la virgule (,) et salissons-le quelque peu:

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

Le script du dernier article ne fonctionnera plus, puisque jusqu’ici nous supposions que les champs étaient séparés par des espaces, ce qui n’est plus le cas.

En admettant que les champs seront séparés par des virgules, il faut effectuer un petit changement dans notre script, pour nettoyer le second champ:

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

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

END { puts "Total: #{total}" }

Et pour que Ruby sépare bien les champs en tenant compte des virgules, il faut lui passer l’option -F, suivie d’une regex (sans les //) décrivant le séparateur:

[~]⇒ ruby -an -F, test.rb < data.txt 
Total: 12

Et voilà.

À demain.

Articles connexes

Commentaires