Remplacer Sed et Awk par Ruby 13: Séparateurs en sortie
La dernière fois on a vu les numéros de lignes, aujourd’hui on voit comment modifier les séparateurs de champ et d’enregistrement.
On continue donc avec un exemple trivial, on a ce fichier de données:
1,a
2,b
3,c
On va intervertir les champs et modifier le séparateur de champs pour qu’il devienne un point-virgule (pour le nom des variables prédéfinie, je vous renvoie à l’article sur la gem English):
BEGIN {
require 'English'
$FS = ','
$OFS = ';'
}
$_ = $F.reverse.join
join
va utiliser automatiquement le contenu de $OFS
:
[~]⇒ ruby -apl test1.rb data.txt
a;1
b;2
c;3
Parfois on veut aussi modifier le séparateur d’enregistrements (les enregistrements
sont ici nos lignes du fichier). Par exemple, pour passer du caractère newline à
:
:
BEGIN {
require 'English'
$FS = ','
$OFS = ';'
$ORS = ':'
}
$_ = $F.reverse.join
Et le résultat:
[~]⇒ ruby -apl test1.rb data.txt
a;1:b;2:c;3:
Et bien sûr, si vous le voulez vraiment, vous pouvez toujours écrire ce script en une ligne, directement dans la console:
[~]⇒ ruby -aple 'BEGIN{$;=",";$,=";";$\=":"};$_=$F.reverse.join' data.txt
Mais êtes-vous sûr de vouloir faire ça ?!
À demain.