[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: