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

Résolu
primoOrion Messages postés 3 Statut Membre -  
primoOrion Messages postés 3 Statut Membre -
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 !

A voir également:

4 réponses

dubcek Messages postés 19021 Statut Contributeur 5 637
 
hello
$ awk '/Population/ {for(n=1; n<6; n++){getline; if(n>2)print $(NF-1), $NF}} ' fichier
- 1.08869
+ 0.08879
- 0.00011
2
primoOrion Messages postés 3 Statut Membre
 
Salut et un grand merci pour ta réponse :)
Pourrais tu m'expliquer en quoi consiste les deux dernières options $(NF-1), $NF ?
0
dubcek Messages postés 19021 Statut Contributeur 5 637
 
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
0
primoOrion Messages postés 3 Statut Membre
 
D'accord :)
Un tout grand merci !
0