Re: changer l'ordre des nombres en ligne de commande
salut,
On Sat, Mar 01, 2025 at 09:02:20PM +0100, Bernard Schoenacker wrote:
> Bonjour,
> Merci beaucoup pour la réponse, attention c'est juste un exemple dans une liste
> <terme de matière> " espace " <Qtité numérique> " espace" <unité g pour grammes>
dans ton premier mail, le séparateur n'est pas un espace mais une
tabulation. si c'est le cas tout le temps alors le problème est simple:
<<% hd
Butter 500g
Ici c'est bien une tabulation
v
00000000 42 75 74 74 65 72 09 35 30 30 67 0a |Butter.500g.|
0000000c
du coup:
<<% awk -F'\t' -vOFS='\t' '{t=$1;$1=$2;$2=t}1'
Butter 500g
Amour pour le format TSV ∞
ou une version plus verbeuse
awk '
BEGIN { FS = OFS = "\t" }
{
temp = $1
$1 = $2
$2 = temp
}
1 # toujours vrai donc fait toujours l'action par défaut ({print})
'
ou en perl si tu as de gros volumes (ce qui ne sera pas le cas pour une
recette):
<<% perl -plF'\t' -E '$_=join "\t", reverse @F'
Butter 500g
Amour pour le format TSV ∞
> Merci beaucoup pour la réponse, attention c'est juste un exemple dans une liste
> <terme de matière> " espace " <Qtité numérique> " espace" <unité g pour grammes>
si tu dis vrai (on ne peut pa compter sur \t), faut prévoir les cas
pourris du genre
doliprane 1G 1 barquette
huile d'olive ½ louche
ma stratégie serait donc
<produit> <ws>* <quantité> <ws>* <unité>
et donc considérer que <quantité est la dernière valeur numérique de la
ligne.
<<% perl -plE '/(.*) *(\d+|[½¾]) *(.*)/; $_="$2 $3\t$1"'
doliprane 1G 1 barquette
huile d'olive ½ louche
<<% sed -E 's/(.*) *([0-9]+|[½¾]) *(.*)/\2 \3\t\1/'
doliprane 1G 1 barquette
huile d'olive ½ louche
bonne soirée
--
Marc Chantreux
Pôle CESAR (Calcul et services avancés à la recherche)
Université de Strasbourg
14 rue René Descartes,
BP 80010, 67084 STRASBOURG CEDEX
03.68.85.60.79
Reply to: