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.