Script ksh pour extraire lignes particulieres d'un fichier txt

Résolu/Fermé
ugbsaintlouis Messages postés 8 Date d'inscription jeudi 21 février 2013 Statut Membre Dernière intervention 23 février 2013 - 21 févr. 2013 à 20:29
ugbsaintlouis Messages postés 8 Date d'inscription jeudi 21 février 2013 Statut Membre Dernière intervention 23 février 2013 - 23 févr. 2013 à 12:15
Bonjour,

Je suis chercheur en physique de l'atmosphère et je dispose de fichiers avec de milliers de lignes à traiter. Toutes ces données ne sont pas nécessaires donc j'aurais besoin de trier afin de ne traiter que les données qui m'intéressent.
Comme exemple réduit, je dispose d'un fichier "depart.txt" de 6 lignes et 11 colonnes sous ce format:

1 63.1493 -31.5184 163.59 163.01 231.82 244.82 237.46 228.75 226.33 224.79
2 63.8144 -29.6782 162.06 161.74 228.95 245.02 239.07 229.79 227.04 225.22
3 64.3665 -28.0338 161.56 162.72 228.13 245.73 239.69 230.53 227.31 225.28
4 64.8366 -26.5380 159.62 161.97 226.23 245.52 240.50 231.01 227.41 225.39
5 65.2450 -25.1572 160.67 162.72 224.81 245.23 241.52 231.24 227.64 225.72
6 65.6059 -23.8663 197.98 199.85 237.42 248.06 242.59 232.26 228.07 225.52

Le problème consiste à créer un autre fichier texte qui contiendra les lignes qui satisfont simultanément ces conditions :
- la valeur de la deuxième colonne est strictement inférieur à 64.000
- la valeur de la troisième colonne est strictement supérieur à -33.0000

Ainsi Je disposerais d'un fichier "reponse.txt" contenant ces données :
1 63.1493 -31.5184 163.59 163.01 231.82 244.82 237.46 228.75 226.33 224.79
2 63.8144 -29.6782 162.06 161.74 228.95 245.02 239.07 229.79 227.04 225.22
Je sollicite donc votre assistance pour disposer d'un script ksh permettant de le faire.
Je vous remercie d'avance.

A voir également:

5 réponses

Utilisateur anonyme
21 févr. 2013 à 20:40
salut,

en awk, ce sera plus efficace, plus beau, plus mieux

$ cat script.awk
#!/usr/bin/awk -f
($2 < 64.000 && $3 > -33.0000)
$ ./script.awk fichier.data
1 63.1493 -31.5184 163.59 163.01 231.82 244.82 237.46 228.75 226.33 224.79
2 63.8144 -29.6782 162.06 161.74 228.95 245.02 239.07 229.79 227.04 225.22


comme ça aussi
awk '($2 < 64.000 && $3 > -33.0000)' fichier.data
1
ugbsaintlouis Messages postés 8 Date d'inscription jeudi 21 février 2013 Statut Membre Dernière intervention 23 février 2013
22 févr. 2013 à 00:58
Merci beaucoup qqchquicommenceparQ!!!
pourriez -vous m'ajouter une ligne qui permettrai de recuperer ces données dans un fichier .data au lieu de les affichers dans le shell?
Merci d'avance.
0
ugbsaintlouis Messages postés 8 Date d'inscription jeudi 21 février 2013 Statut Membre Dernière intervention 23 février 2013
22 févr. 2013 à 02:21
Mis à jour
qqchquicommenceparQ

j'ai résolu la récupération des données dans un fichier .txt par :

awk '{($2 < 64.000 && $3 > -33.0000)}{print > f".txt"}' fic1.txt

En fait mon critère de sélection est que $2 soit dans l'intervalle [60,64]
et $3 soit dans l'intervalle [-33,-30]

j'ai essayé cette ligne de commande:

awk '{($2 == 60, $2 == 64 && $3 == -33, $3 == -30)}{print > f".txt"}' fic1.txt
il y erreur : awk: line 1: syntax error at or near }

MERCI d'avance!!!
0
Utilisateur anonyme
22 févr. 2013 à 03:00
awk '( (60.000<$2 && $2<64.000) && (-33.0000<$3 && $3<-30.0000) )' fichier.data > fichier.resultat
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ugbsaintlouis Messages postés 8 Date d'inscription jeudi 21 février 2013 Statut Membre Dernière intervention 23 février 2013
23 févr. 2013 à 02:02
Merci beaucoup qqchquicommenceparQ pour votre spontanéité.
cette ligne de commande crée un fichier.résultat vide!!!
Je crois que le awk n'est pas tout-à fait exécuter. Comment peut-on remédier?
0
Utilisateur anonyme
23 févr. 2013 à 02:15
le fichier de données a-t-il changé ?

avec les données fournies, seule la première ligne est retenue.
0
ugbsaintlouis Messages postés 8 Date d'inscription jeudi 21 février 2013 Statut Membre Dernière intervention 23 février 2013
Modifié par ugbsaintlouis le 23/02/2013 à 11:52
Non le fichier de données n'a pas changé,
les données fournies ne sont qu'une illustration de la structure du fichier.
Je travail sur un fichier de 23 490 lignes. je crois que c'est le awk qui n'est pas exécuté
car cette commande crée un fichier résultat vide.
0
ugbsaintlouis Messages postés 8 Date d'inscription jeudi 21 février 2013 Statut Membre Dernière intervention 23 février 2013
23 févr. 2013 à 11:59
Pour étayer mon argumentaire
En exécutant ce code :
awk '($2 < 64.000 && $3 > -33.0000)' fic.txt > f1.txt
je dispose à la fin de f1.txt avec les données sélectionnées, soit 16 494 lignes sur 23 490.
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
23 févr. 2013 à 12:13
Salut,

Et donc ? Où est le souci ? Ce n'est pas ce que tu veux ?
0
ugbsaintlouis Messages postés 8 Date d'inscription jeudi 21 février 2013 Statut Membre Dernière intervention 23 février 2013
Modifié par ugbsaintlouis le 23/02/2013 à 12:23
Merci qqchquicommenceparQ !!!

zipe31 le souci était que pour ce code :
awk '( (60.000<$2 && $2<64.000) && (-33.0000<$3 && $3<-30.0000) )' fic.data > fic.resultat
je trouve un fichier résultat vide.

Je viens de comprendre le pourquoi, car aucune ligne ne satisfait ces conditions.
Merci qqchquicommenceparQ et zipe31 !!!
0