Extraire numero de ligne spécifique

[Résolu/Fermé]
Signaler
-
 doucedouce -
Bonjour,voila mon probleme je dispose d'un fichier contenant des colonnes (supposons 4colonnes)
comme suit(pr simplifier la chose ,les chiffres sont donnés au hasard) je nomme toto ce fichier
toto:
1 2 3 4
5 6 7 8
a 9 10 56
a a 11 45
a a 67 89
a a a 45
a a a a
ce que je voudrais maintenant c'est connaitre pour chaque colonne le numero de la premiere ligne dans laquelle aparait le "a" et les mettre dans un fichier colonne ,c'est a dire pour l'exemple de toto, le résultat final sera comme suit:
tata:
3
4
6
7

voila j 'espere que c'est assez clair et merci

4 réponses

Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 872
Salut,
sed -n '/a/=' toto > colonne
,-))
reBonsoir,
j'ai essayé avec cette commande mais ca n'a malheureusement pas donné le résultat attendu,
en fait je veux par exemple que le script fasse un traitement sur chaque colonne et qu'il me donne le numero de ligne ou la premiere valeur de "a" apparait , et qu'il fasse de meme pour chaque aute colonne ...
et pour le fichier colonne résultat : sa premiere valeur par exemple ca correspond a la ligne de la premiere valeur "a" DE LA PREMIERE COLONNE , et la deuxieme valeur c'est la ligne ou on a trouvé la premiere valeur "a" dans la deuxieme colonne et ainsi de suite....
merci d'avance
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 872
[tmpfs]$ cat toto
1 2 3 4
5 6 7 8
a 9 10 56
a a 11 45
a a 67 89
a a a 45
a a a a

[tmpfs]$ sed -n '/a/=' toto
3
4
5
6
7

[tmpfs]$ 
C'est pas bon ?
Bonjour,
en fait mon fichier toto est un peu plus compliqué que celui que je viens de donner, mon fichier contient dans sa premiere colonne des hauteurs (des niveaux verticaux) et les autres colonnes sont en fait des données de temperatures ,(il existe des valeurs de temperaturees et des "nan" ie des valeurs absentes)
mon probleme c'est 'avoir pour chaque colonne la hauteur ou se trouve le premier "nan" ( ceci en suposant que par exemple je peux avoir que la hauteur du "nan" de la 3eme colonne soit avant la hauteur du "nan" de la 1ere colonne) et avec la commande que vous m'avez conseillé ,ca ne donne pas le résultat voulu. voila
merci infiniment
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 872 > doucedouce
Merci d'afficher un exemple concret du contenu du fichier cible et le résultat voulu, sans quoi on part dans le mur ;-(
>
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020

voila un exemple du fichier cible (un peu court quand meme) nommé par exemple toto:

0.5 22 27 20 19
1 21 26 nan 18
3 20 25 nan 16
4 nan 24 nan nan
50 nan 23 nan nan
100 nan 22 nan nan
200 nan nan nan nan
300 nan nan nan nan
800 nan nan nan nan


et le resultat voulu c'est:
4 # ie (le premier nan de la premiere colonne se trouve a la hauteur 4)
200 # ie (le premier nan le la deuxieme colonne se trouve a une hauteur de 200)
1
4

voila merci pour votre patience :)
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 872 > doucedouce
Ok je pige mieux ;-\

Et le résultat escompté en sortie est ? (en partant du fichier "toto" donné en exemple)
>
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020

Pour cet exemple toto ,le resultat en sortie sera le fichier tata(un fichier d'une seule colonne) comme suit:
4
200
1
4
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 872
Un truc du genre...
jp@MDK:~/tmpfs ssh$ cat plop
0.5 22 27 20 19
1 21 26 nan 18
3 20 25 nan 16
4 nan 24 nan nan
50 nan 23 nan nan
100 nan 22 nan nan
200 nan nan nan nan
300 nan nan nan nan
800 nan nan nan nan

jp@MDK:~/tmpfs ssh$ cat foo.sh
#! /bin/sh

#set -xv

i=1
while [ "$i" -lt 6 ]
do
awk '$'"$i"' ~ /nan/ {print $1;exit }' plop
i=$((i + 1))
done

jp@MDK:~/tmpfs ssh$ ./foo.sh
4
200
1
4

jp@MDK:~/tmpfs ssh$
;-))
C'est parfait ,Merci énormement pour votre aide , votre patience et compréhension :D
au plaisir ;)