Rechercher et afficher une chaîne de caractère variable

Résolu/Fermé
Messages postés
3
Date d'inscription
vendredi 28 novembre 2014
Statut
Membre
Dernière intervention
30 novembre 2014
-
Messages postés
3
Date d'inscription
vendredi 28 novembre 2014
Statut
Membre
Dernière intervention
30 novembre 2014
-
Bonjour à tous,

j'aimerais créer un script shell qui me permettrait d'aller chercher une chaîne de caractère donné (constante) et d'afficher un caractère (ou un nombre) situé à une "distance" constante de la chaîne donnée en entré.

Voilà a quoi ressemble le fichier texte dans lequel j'aimerai effectué ma recherche:

Population analysis by basis function type

Unique atom s p d f g Total Charge
4 O 3.93093 5.12801 0.02745 0.00230 0.00000 9.08869 - 1.08869
5 H 0.74283 0.15635 0.01203 0.00000 0.00000 0.91121 + 0.08879
6 RB 2.95785 6.01587 0.02277 0.00362 0.00000 9.00011 - 0.00011

J'aimerais pouvoir recherché la chaîne de caractères "Population analysis by basis function type" qui est la même pour tout mes fichiers et afficher les trois nombres de la dernière collonne (charge), c'est à dire: - 1.08869, + 0.08879 et - 0.00011. Ces nombres variant d'un fichier à l'autre.

Il me faudrait donc probablement utiliser les commandes grep, sed et awk. J'ai fait pas mal de recherche mais n'ai pas trouvé ce qu'il me faut ...

Je précise que je suis débutant pour tout ce qui est système Linux et je possède des notions au language de programmation (C++).

Merci d'avance pour votre aide !

4 réponses

Messages postés
18413
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
28 janvier 2022
5 534
hello
$ awk '/Population/ {for(n=1; n<6; n++){getline; if(n>2)print $(NF-1), $NF}} ' fichier
- 1.08869
+ 0.08879
- 0.00011
Messages postés
3
Date d'inscription
vendredi 28 novembre 2014
Statut
Membre
Dernière intervention
30 novembre 2014

Salut et un grand merci pour ta réponse :)
Pourrais tu m'expliquer en quoi consiste les deux dernières options $(NF-1), $NF ?
Messages postés
18413
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
28 janvier 2022
5 534
puisqu'il y a un espace entre le signe et le nombre, il faut afficher l'avant-dernier champ $(NF-1) et le dernier champ $NF
autre méthode avec grep
$ grep -A 5 Population fichier | grep -o '. [0-9\.]*$'
- 1.08869
+ 0.08879
- 0.00011
Messages postés
3
Date d'inscription
vendredi 28 novembre 2014
Statut
Membre
Dernière intervention
30 novembre 2014

D'accord :)
Un tout grand merci !