vchris95 bonjour, voila je vous contacte car je souhaiterai avoir un peu de votre soutient. J'ai donc un fichier dans lequel qui ressemble à celui-ci dessous DEBUT DU FICHIER --> compte comme la ligne première ligne du fichier Commentaire1 --> compte comme la ligne 2 Commentaire2 --> compte comme la ligne 3 Commentaire3 --> compte comme la ligne 4 Commentaire4 --> compte comme la ligne 5 Commentaire5 --> compte comme la ligne 6 Articles1 --> compte comme la ligne 7 Articles2 --> compte comme la ligne 8 Articles3 --> compte comme la ligne 9 . . . ArticlesX --> compte comme la ligne X FIN DU FICHIER --> compte comme la dernière ligne du fichier Et donc pour ma part, je souhaiterai créer un script qui puisse me récupérer uniquement les lignes >6 (strictement supérieur) et qui ne récupére pas la dernière (nombre de ligne finale -1) puis le enregistre dans un fichier que je nommerai "toto.txt" En résumé, je voudrais récupérer uniquement les "Articles". On m'a parlé de l'utilitaire Shell awk mais je n'arrive pas à coder correctement le script, pourriez vous m'aider svp, merci.
pingou Pourquoi un script ? Sinon j'irai plus voir du côté de sed: http://linuxcommando.blogspot.com/2008/03/using-sed-to-extract-lines-in-text-file.html Voire une solution par perl/python/php... exemple: http://www.computing.net/answers/programming/extract-lines-from-a-text-file/13817.html
Pikachu_2014 Bonjour, sed est en effet plus simple peut-être à utiliser que awk ici : sed -i '1,6d; $d' fichier (la commande supprime en fait les 6 premières lignes du fichier, ainsi que la dernière).
vchris95 Bonjour, je vous remercie de vos réponses rapides et je vous souhaite tout d'abord une très bonne année !🙂 (santé, bonheur et argent) Sinon, pour nos moutons, je voulais faire un script, car celui-ci sera appelé dans un autre script qui à une autre fonctionnalité complètement différente.
vchris95 Tout marche bien mais parcontre j'ai une question bête en fait mon fichier ressemble à ca: DEBUT DU FICHIER --> compte comme la ligne première ligne du fichier Commentaire1 --> compte comme la ligne 2 Commentaire2 --> compte comme la ligne 3 Commentaire3 --> compte comme la ligne 4 Commentaire4 --> compte comme la ligne 5 Commentaire5 --> compte comme la ligne 6 Articles1 --> compte comme la ligne 7 Articles2 --> compte comme la ligne 8 Articles3 --> compte comme la ligne 9 . . . ArticlesX --> compte comme la ligne X FIN DU FICHIER --> compte comme la dernière ligne du fichier Et donc il y a un (seul) espace avant chaque article, j'en ai mis plusieurs pour que vous voyez correctement. Sauriez vous comment je pourrais faire pour lorsque je fais la commande: sed -i '1,6d; $d' fichier qu'il me récupère les lignes des articles(ce qu'il fait déjà, mais sans qu'il me rajoute les espaces avant) Merci encore.
Fée du raccord awk 'BEGIN{b="initawk"}{ a=$0; if (NR>6) {if (match(b,"initawk")!=1) print NR-1" "b; b=a;}} END{print "fin awk"a}' tonFichier Tu vires l'occurence >>END {print "fin awk"$a}<< pour ne pas avoir la dernière ligne. J'ai mis les occurrences BEGIN/END pour que tu vois à quoi elles servent. Reformatage du coeur de L'algorithme (plus visible): a=$0; if (NR>6) { if (match(b,"initawk")!=1) print NR-1" "b; b=a; } Tu mets dans le fichier maCmd.txt : BEGIN{b="initawk"} { a=$0; if (NR>6) { if (match(b,"initawk")!=1) print NR-1" "b; b=a; } } END{print "fin awk"a} Tu lances : awk -f maCmd.txt monFichier (bien sur, si la dernière ne te convient pas, END... à retirer) Plus simple: awk '{ if (match($1,"Article")==1) print NF" "$0 }' tonFichier Ce qui me semble plus pertinent c'est une regexp sur "Article" qui ne sera jamais article je suppose, mais trouver l'élément commun, ou par logique inverse, qui ne contient pas "commentaire". Pour plus 'man awk'. Bye
Pikachu_2014 Sauriez vous comment je pourrais faire pour lorsque je fais la commande: sed -i '1,6d; $d' fichier qu'il me récupère les lignes des articles(ce qu'il fait déjà, mais sans qu'il me rajoute les espaces avant) Peut-être ceci ? sed -i '1,6d; $d; s/^\s*//' fichier
vchris95 Fée du raccord, merci beaucoup de ton aide 🙂 mais je crois que maintenant je vais pencher sur la solution du sed qui est bien plus simple au final 😃
pingou @vchris95 & Fée du raccord Passez par les balises code, ça garde la structure/indentation et ça présente bien