Malheureusement, je pense que la norme awk
ne permet qu'un séparateur de champ afin que vous devrez pré-traiter les données. Vous pouvez le faire avec tr
mais si vous voulez vraiment une solution awk
-Seulement, utilisez:
pax> echo '123,01-08-2006
124,01-09-2007
125,01-10-2009
126,01-12-2010' | awk -F, '{print $1"-"$2}' | awk -F- '{print $1","$4"-"$3"-"$2}'
Ce sorties:
123,2006-08-01
124,2007-09-01
125,2009-10-01
126,2010-12-01
comme on le souhaite.
La première awk
modifie les caractères ,
à -
de sorte que vous avez quatre champs séparés par le même caractère (ce qui est le bit j'utilise habituellement pour tr ',' '-'
).
La seconde awk
les imprime dans l'ordre que vous avez spécifié, en corrigeant les séparateurs de champs en même temps.
Si vous utilisez une implémentation awk
qui permet à plusieurs FS
caractères, vous pouvez utiliser quelque chose comme:
gawk -F ',|-' '{print $1","$4"-"$3"-"$2}'
Je reformulé votre question, et a décidé de modifier libellé de « reverse une chaîne ». Ce que vous faites n'est pas inverser une chaîne, mais inverser l'ordre des champs, séparés par des caractères non-mot. N'hésitez pas à proposer une meilleure formulation si je devine quel est votre but incorrectement. –
Possible duplication de [manière élégante d'inverser l'ordre des colonnes] (https://stackoverflow.com/questions/1227986/elegant-way-to-reverse-column-order) –