Modifier le résultat affiché par une commande

Fermé
bloomingdals - 10 juin 2013 à 10:44
bloomingdals Messages postés 74 Date d'inscription mercredi 20 février 2013 Statut Membre Dernière intervention 6 août 2013 - 11 juin 2013 à 11:46
Bonjour,

le résultat d'une commande donnée m'affiche le résultat suivant:

2013-06-07 17:41:20.010  65070 ->      1300        0   391700        0    10  1769.978     1770


(c'est juste un exemple le nombre de lignes retourné peut être très grand)

je voudrais faire en sorte que le résultat affiché à l'écran soit de cette forme:

65070:1300:0:391700:0:10:1769.978:1770


je n'arrive pas à trouver la bonne expression régulière.

Merci d'avance de votre aide
A voir également:

4 réponses

zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 418
10 juin 2013 à 10:51
Salut,

$ echo "${A}"
2013-06-07 17:41:20.010  65070 ->      1300        0   391700        0    10  1769.978     1770

$ echo "${A}" | awk 'BEGIN{OFS=":"}{print $3,$5,$6,$7,$8,$9,$10,$11 }'
65070:1300:0:391700:0:10:1769.978:1770

0
bloomingdals
10 juin 2013 à 10:58
Merci beaucoup, c'est ce qu'il me fallait.
Je voudrais juste savoir si awk est le bon choix pour un nombre de ligne retourné de l'ordre de 5000 lignes?
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 418
10 juin 2013 à 10:59
Normalement oui ;-)
0
bloomingdals Messages postés 74 Date d'inscription mercredi 20 février 2013 Statut Membre Dernière intervention 6 août 2013 2
Modifié par bloomingdals le 11/06/2013 à 10:00
rebonjour,
La commande que tu m'a fourni a fonctionné parfaitement jusqu'à ce que la valeur de l'un des champs a été suffisament grandes pour qu'une unité de mesure apparaisse dans la ligne.
je m'explique, le champs $7 est le nombre d'octets reçu. Il est exprimé en bytes. Jusqu'ici pas de problèmes car tous les champs de ma ligne sont des réels.
Mais je me suis rendu compte que lorsque le nombre d'octets augmente, il s'exprime en Méa bytes au lieu de byte et la lettre M apparait.
Je voudrai modifier la commande de manière a concaténer les champs x et y si y est une lettre.
Comment je pourrais faire?
Merci
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 418
11 juin 2013 à 11:42
Salut,

Il te faut rajouter un test à la commande.

$ cat plop 
2013-06-07 17:41:20.010  65070 ->      1300        0   391700        0    10  1769.978     1770
2013-06-07 17:41:20.010  65070 ->      1300        0   391700 M       0    10  1769.978     1770
2013-06-07 17:41:20.010  65070 ->      1300        0   391700        0    10  1769.978     1770
2013-06-07 17:41:20.010  65070 ->      1300        0   391700 M       0    10  1769.978     1770

$ cat script.awk 
BEGIN{
OFS=":"
}
{
	if($8 !~ /[[:digit:]]/){
	print $3,$5,$6,$7$8,$9,$10,$11,$12
	}
	else
	{
	print $3,$5,$6,$7,$8,$9,$10,$11 
	}
}

$ awk -f script.awk plop 
65070:1300:0:391700:0:10:1769.978:1770
65070:1300:0:391700M:0:10:1769.978:1770
65070:1300:0:391700:0:10:1769.978:1770
65070:1300:0:391700M:0:10:1769.978:1770
0
bloomingdals Messages postés 74 Date d'inscription mercredi 20 février 2013 Statut Membre Dernière intervention 6 août 2013 2
11 juin 2013 à 11:46
Merci beaucoup c'est ce que je cherchais.
Je suppose que la taille des données n'a aucune incidence sur la durée de traitement puisqu'on n'utilise pas le readline non?
0