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: Flip flop

| Comments

Niveau : facile

Comment faire pour travailler sur un groupe de lignes, quand ce groupe de lignes commence avec un marqueur et fini avec un autre ? Par exemple, avec le fichier de données suivant, on cherche à afficher les lignes depuis «start» jusqu’à «end»:

data.txt
1
2
3
4
5
6
7
8
9
10
11
1
2
3
start
4
5
6
end
7
8
9

C’est ce qu’on appelle un flip flop : On commence le traitement sur une condition de départ, puis on traite toutes les lignes jusqu’à une condition d’arrêt. C’est un principe très utilisé avec Sed ou Awk. Pour faire la même chose en Ruby, on va se servir d’un range:

flip_flop.rb
1
puts $_ if $_.start_with?("start")..$_.start_with?("end")
1
2
3
4
5
6
[~]⇒ ruby -n flip_flop.rb data.txt
start
4
5
6
end

À demain.

Articles connexes

Commentaires