[linux] Filtrer des données avec grep
kulbank
-
kulbank -
kulbank -
Bonjour à tous,
Je suis nouveau sous linux et j'ai un souci.
Pour un projet de modélisation 3D d'un terrain, je dois sélectionner des lignes de coordonnées parmi un grand nombre de données. J'ai un fichier texte de 350 Mo avec 13 millions de coordonnées XYZ de points. J'aimerais filtrer ces points pour n'en prendre que ceux qui se trouve autour des bâtiments à modéliser.
Exemples de points: 576253.50 184999.50 621.30
576254.50 184999.50 621.37
576255.50 184999.50 621.46
Le premier nombre est en X, le second en Y et le dernier l'altitude. J'aimerais isoler les points qui se trouvent dans l'intervalle en X [578553;578880] et en Y [182300;182648]
Je me suis dit que la fonction grep irait parfaitement! J'ai donc essayé mais cela ne fonctionne pas. Grep croit que c'est des chiffres et non des nombres.
grep -E [578553-578880 182300-182648]
Les points désirés doivent être compris les deux intervalles.
PS: quelle est la commande à utiliser afin d'enregistrer les valeurs trouvées?
Merci d'avance!
Je suis nouveau sous linux et j'ai un souci.
Pour un projet de modélisation 3D d'un terrain, je dois sélectionner des lignes de coordonnées parmi un grand nombre de données. J'ai un fichier texte de 350 Mo avec 13 millions de coordonnées XYZ de points. J'aimerais filtrer ces points pour n'en prendre que ceux qui se trouve autour des bâtiments à modéliser.
Exemples de points: 576253.50 184999.50 621.30
576254.50 184999.50 621.37
576255.50 184999.50 621.46
Le premier nombre est en X, le second en Y et le dernier l'altitude. J'aimerais isoler les points qui se trouvent dans l'intervalle en X [578553;578880] et en Y [182300;182648]
Je me suis dit que la fonction grep irait parfaitement! J'ai donc essayé mais cela ne fonctionne pas. Grep croit que c'est des chiffres et non des nombres.
grep -E [578553-578880 182300-182648]
Les points désirés doivent être compris les deux intervalles.
PS: quelle est la commande à utiliser afin d'enregistrer les valeurs trouvées?
Merci d'avance!
1 réponse
-
Salut,
Essaye avec "awk" plutôt :
awk '($1>=578553 && $1<=578880) && ($2>=182300 && $2<=182648) { print }' fichier-
J'ai essayé avec awk et il me dit qu'il y a un & en trop...
awk: 1: unexpected character '&'
Et après je fais comment pour enregistrer les données que la console va m'afficher?
PS: J'ai essayé en réduisant le codeawk '($1>=578553 && $1<=578880) { print }' fichier.txt
Et là ça fonctionne. Vous pourriez m'aider? -
-
-
-