Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 19/01/2011, à 18:18

FRUiT

[Résolu] Aide awk ou sed

Bonjour tout le monde.

Voilà je bute sur un problème particulier. Soit 'fichier', de la forme :

--- mardi 8 décembre 2009, 12:38:10 (UTC+0100) ---
exit
--- mardi 8 décembre 2009, 12:39:02 (UTC+0100) ---
--- mardi 8 décembre 2009, 12:41:35 (UTC+0100) ---
--- mardi 8 décembre 2009, 12:44:59 (UTC+0100) ---
--- mardi 8 décembre 2009, 12:45:47 (UTC+0100) ---
--- mardi 8 décembre 2009, 12:48:39 (UTC+0100) ---
--- mardi 8 décembre 2009, 12:49:27 (UTC+0100) ---
--- mardi 8 décembre 2009, 12:50:02 (UTC+0100) ---
promptype -s
--- mardi 8 décembre 2009, 12:51:04 (UTC+0100) ---
promptype -n
echo -e "\033[1B"
echo -e "\033[30A"
--- mardi 8 décembre 2009, 13:33:19 (UTC+0100) ---
promptype -v
echo -e $STR
echo -e "$STR"
env
echo "$STR"
echo "$S"
env | grep S
--- mardi 8 décembre 2009, 13:57:14 (UTC+0100) ---
--- mardi 8 décembre 2009, 13:57:29 (UTC+0100) ---
--- mardi 8 décembre 2009, 14:00:01 (UTC+0100) ---
which w3m
w3m ctlseqs.ms
--- mardi 8 décembre 2009, 14:03:26 (UTC+0100) ---

qui est l'historique de ma console. Les sessions sont délimitées par '--- $(date) ---'.

Avec awk, je supprime toutes les lignes doublons, ce qui a pour conséquence de parfois 'vider' le contenu entre deux ou plusieurs sessions (les enchainements de lignes '--- $(date) ---'.

Je voudrais, lorsque le cas se présente, pouvoir supprimer les intitulés des sessions "vidées", sauf la dernière. Le seul dénominateur commun entre ces lignes étant qu'elles commencent et finissent par '---'.
Exemple :

env | grep S
--- mardi 8 décembre 2009, 13:57:14 (UTC+0100) ---
--- mardi 8 décembre 2009, 13:57:29 (UTC+0100) ---
--- mardi 8 décembre 2009, 14:00:01 (UTC+0100) ---
which w3m

qui deviendrait :

env | grep S
--- mardi 8 décembre 2009, 14:00:01 (UTC+0100) ---
which w3m

Et ceci de manière bien évidemment récursive et avec le moins de lignes possible de code, l'idéal étant un one-liner awk ou sed.

Si quelqu'un peut m'éclairer, j'ai vraiment du mal :'(

Dernière modification par FRUiT (Le 19/01/2011, à 18:58)


Neon Suite by FRUiT (kde4.6) [url]http://[Merci de relire les règles]/yzm7cee[/url]
"Pour la carotte, le lapin est la plus parfaite incarnation du mal" (R. Sheckley)
clean

Hors ligne

#2 Le 19/01/2011, à 18:42

chopinhauer

Re : [Résolu] Aide awk ou sed

Tu veux donc fournir à AWK un petit look-ahead. Pour faire cela tu vas devoir sauvegarder la ligne courante ailleurs et l'imprimer après. Par exemple :

# Ne rien imprimer à la première ligne
FNR==1{last=$0;next}
!/^---/||!(last~/^---/) {print last;}
{last=$0;}
# N'oublions pas d'imprimer la dernière ligne
END{print last;}

Pensez à donner un bon titre à vos sujets : cela permettra d'aider d'autres utilisateurs dans votre même situation. Ce n'est pas qu'en donnant des solutions qu'on aide, mais aussi en posant des bonnes questions et… facilement trouvables.

Hors ligne

#3 Le 19/01/2011, à 18:58

FRUiT

Re : [Résolu] Aide awk ou sed

Excellent, félicitation et grand énorme merci cher chopinhauer, rien à redire, résolu ! smile

Dernière modification par FRUiT (Le 19/01/2011, à 19:03)


Neon Suite by FRUiT (kde4.6) [url]http://[Merci de relire les règles]/yzm7cee[/url]
"Pour la carotte, le lapin est la plus parfaite incarnation du mal" (R. Sheckley)
clean

Hors ligne