Script ksh pour extraire lignes particulieres d'un fichier txt
Résolu
ugbsaintlouis
Messages postés
8
Date d'inscription
Statut
Membre
Dernière intervention
-
ugbsaintlouis Messages postés 8 Date d'inscription Statut Membre Dernière intervention -
ugbsaintlouis Messages postés 8 Date d'inscription Statut Membre Dernière intervention -
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.
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:
- Script ksh pour extraire lignes particulieres d'un fichier txt
- Fichier bin - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Fichier rar - Guide
- Extraire une video youtube - Guide
5 réponses
salut,
en awk, ce sera plus efficace, plus beau, plus mieux
comme ça aussi
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
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.
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.
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!!!
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!!!
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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?
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?
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 !!!
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 !!!