Pages : 1
#1 Le 02/02/2022, à 10:08
- Olivier31450
petit problème avec un scrit shell
Bonjour à tous
petit nouveau sur le forum et dans le monde des scripts shell je souhaitais savoir si quelqu'un aurait une réponse à ma question:
Voilà je vais piocher avec mon script sur des fichiers disponibles sur le web des positions d'icebergs que je copie dans un fichier nommé "icebergs reported" et j'obtiens çà:
1. ICEBERGS REPORTED IN:
A. A64, 67-13S 059-40W.
B. A69A, 66-58S 059-00W.
C. A69B, 66-19S 059-52W.
D. A69C, 66-37S 058-09W.
E. A70, 66-55S 059-42W.
F. A76A, 71-40S 57-20W.
--
1. ICEBERGS REPORTED IN:
A. B09I, 56-46S 029-21W.
B. 60-34S 047-55W.
C. 60-59S 047-33W.
D. 55-28S 027-10W.
E. 66-02S 034-51W.
2. CANCEL THIS MSG 011448Z FEB 22.//
--
1. ICEBERGS REPORTED IN:
A. A64, 67-08S 059-11W.
B. A69A, 67-05S 058-52W.
C. A69B, 66-30S 059-10W.
D. A69C, 66-34S 058-56W.
E. A70, 67-01S 059-59W.
F. A76A, 72-06S 058-16W.
mais je ne souhaiterais conserver que ce que j'ai souligné (à savoir supprimer le texte, les points et tous les icebergs només A64/A69A/A70/B09I.....etc pour ne garder que ceux sans nom.
Voilà je galère, si quelqu'un a une solution? merci d'avance
Bien cordialement
Hors ligne
#2 Le 02/02/2022, à 10:13
- Watael
Re : petit problème avec un scrit shell
salut,
visiblement, on peut définir le séparateur de champs comme étant un point
en gros :
il faut donc ne traiter que les lignes qui commencent par un/des espace(s), une lettre, et un point
afficher le deuxième champ selon tes conditions
tu vas faire ça avec awk très facilement.
Dernière modification par Watael (Le 02/02/2022, à 10:16)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#3 Le 02/02/2022, à 10:20
- Olivier31450
Re : petit problème avec un scrit shell
merci de ta réponse rapide, comme indiqué je débute et là tu me parles un peu chinois
Je vais regarder de près ce que je peux faire avec awk
merci
Hors ligne
#4 Le 02/02/2022, à 10:39
- pingouinux
Re : petit problème avec un scrit shell
Bonjour,
Essaye ceci :
sed -rn 's/^ +[A-Z]\. *([0-9].*)\.$/\1/p' "icebergs reported"
qui donne ce résultat
60-34S 047-55W
60-59S 047-33W
55-28S 027-10W
66-02S 034-51W
Hors ligne
#5 Le 02/02/2022, à 11:09
- Olivier31450
Re : petit problème avec un scrit shell
Si le résultat est celui que tu donnes c'est parfaitement ce que je recherche ;-)
Par contre dans mon script j'ai ca
grep -A 6 "ICEBERGS REPORTED IN:" "Hydrolant.txt" >>"icebergs_reported.txt"
pour créer mon fichier iceberg_reported et ta ligne de commande je la mets à la suite?
merci
Hors ligne
#6 Le 02/02/2022, à 11:40
- Watael
Re : petit problème avec un scrit shell
non. on ne fait pas grep | sed, parce que sed sait faire ce que fait grep.
sed -rn '/ICEBERGS REPORTED IN:/,+6{s/^ +[A-Z]\. *([0-9].*)\.$/\1/p}' tonFichier
je préfère traiter les tables de données avec awk, parce qu'il considère des champs.
utiliser sed sur ce type de fichier, c'est un peu comme traiter un tableau avec un éditeur de texte (ce qu'est sed !), au lieu d'utiliser un tableur.
ou utiliser un tournevis plat sur une vis cruciforme.
Dernière modification par Watael (Le 02/02/2022, à 11:49)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#7 Le 02/02/2022, à 12:20
- xubu1957
Re : petit problème avec un scrit shell
Bonjour,
Comme demandé dans le premier message du tutoriel Retour utilisable de commande
Pour ajouter toi-même les balises code à ton précédent message #1 :
Cliquer sur le lien « Modifier » en bas à droite du message
Sélectionner le texte
Cliquer sur le <> de l'éditeur de message
1. ICEBERGS REPORTED IN:
A. A64, 67-13S 059-40W.
B. A69A, 66-58S 059-00W.
C. A69B, 66-19S 059-52W.
D. A69C, 66-37S 058-09W.
E. A70, 66-55S 059-42W.
F. A76A, 71-40S 57-20W.
1. ICEBERGS REPORTED IN:
A. B09I, 56-46S 029-21W.
B. 60-34S 047-55W.
C. 60-59S 047-33W.
D. 55-28S 027-10W.
E. 66-02S 034-51W.
2. CANCEL THIS MSG 011448Z FEB 22.//
1. ICEBERGS REPORTED IN:
A. A64, 67-08S 059-11W.
B. A69A, 67-05S 058-52W.
C. A69B, 66-30S 059-10W.
D. A69C, 66-34S 058-56W.
E. A70, 67-01S 059-59W.
F. A76A, 72-06S 058-16W.
Dernière modification par xubu1957 (Le 02/02/2022, à 12:24)
Conseils pour les nouveaux demandeurs et pas qu'eux
Important : Pensez à passer vos sujets en [Réso|u] lorsque ceux-ci le sont, au début du titre en cliquant sur Modifier sous le premier message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci. Membre de Linux-Azur
Hors ligne
#8 Le 02/02/2022, à 12:24
- Olivier31450
Re : petit problème avec un scrit shell
désolé d'être aussi pénible mais pour être plus clair:
je veux chercher dans mon fichier Hydrolant.txt (que j'ai récupéré sur le web avec un wget) tout ce qui s'apelle ICEBERGS REPORTED et ne choisir que les positions dont j'ai parlé plus haut et copier tout ça dans un fichier qui s'appelle icebergs_reported.txt
il faut que je tape quoi exactement??
Encore pardon, mais je découvre les scripts et dans ma tête c'est un gros sac de noeuds ;-)
Merci
Hors ligne
#9 Le 02/02/2022, à 13:29
- pingouinux
Re : petit problème avec un scrit shell
je veux chercher dans mon fichier Hydrolant.txt (que j'ai récupéré sur le web avec un wget) tout ce qui s'apelle ICEBERGS REPORTED et ne choisir que les positions dont j'ai parlé plus haut et copier tout ça dans un fichier qui s'appelle icebergs_reported.txt
il faut que je tape quoi exactement??
Il suffit de donner le bon nom au ficher d'entrée, et de rediriger la sortie dans la commande de Watael #6 :
sed -rn '/ICEBERGS REPORTED IN:/,+6{s/^ +[A-Z]\. *([0-9].*)\.$/\1/p}' Hydrolant.txt >icebergs_reported.txt
Hors ligne
#10 Le 02/02/2022, à 15:27
- Olivier31450
Re : petit problème avec un scrit shell
Bon, merci de votre implication à tous, un truc doit m'échapper car j'obtiens de mon côté un fichier de sortie vide. Je ne comprends pas pourquoi!
Hors ligne
#11 Le 02/02/2022, à 16:30
- Watael
Re : petit problème avec un scrit shell
n'aurais-tu pas redirigé le fichier d'entrée (Hydrolant.txt) vers lui-même ?
$ sed -rn '/ICEBERGS REPORTED IN:/,+6p' Hydrolant.txt
ça marche encore, ça ?
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#12 Le 02/02/2022, à 19:22
- Olivier31450
Re : petit problème avec un scrit shell
A priori non
voilà mon script
#!/bin/bash
DATA=/usr/site/data/TLSE/production/SCRIPT_ICEBERGS_OLIVE
DATATMP=$DATA/SCRIPTS/TMP
cd $DATATMP
#acquisition des fichiers hydrolant
cd $DATATMP
wget "https://msi.nga.mil/api/publications/do … MemLAN.txt" -O ${name_daily_hydrolant} Hydrolant.txt --no-check-certificate
#recuperation des positions icebergs dans le corps du texte
grep -A 6 "ICEBERGS REPORTED IN:" "Hydrolant.txt" >>"icebergs_reported.txt"
sed -rn '/ICEBERGS REPORTED IN:/,+6{s/^ +[A-Z]\. *([0-9].*)\.$/\1/p}' icebergs_reported.txt >icebergs_reported_final.txt
Dernière modification par Olivier31450 (Le 02/02/2022, à 19:25)
Hors ligne
#13 Le 02/02/2022, à 20:28
- Watael
Re : petit problème avec un scrit shell
$ wget -qO - --no-check-certificate '[url]https://msi.nga.mil/api/publications/download?type=view&key=16694640/SFH00000/DailyMemLAN.txt[/url]' 2>/dev/null | sed -rn '/ICEBERGS REPORTED IN:/,+6{s/^ +[A-Z]\. +([^.]*).*/\1/p}'
A64, 67-13S 059-40W
A69A, 66-58S 059-00W
A69B, 66-19S 059-52W
A69C, 66-37S 058-09W
A70, 66-55S 059-42W
A76A, 71-40S 57-20W
B09I, 56-46S 029-21W
60-34S 047-55W
60-59S 047-33W
55-28S 027-10W
66-02S 034-51W
A64, 67-08S 059-11W
A69A, 67-05S 058-52W
A69B, 66-30S 059-10W
A69C, 66-34S 058-56W
A70, 67-01S 059-59W
A76A, 72-06S 058-16W
je t'ai dit que le grep est inutile ?
tu vois, il est inutile; les fichiers temporaires aussi.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#14 Le 02/02/2022, à 21:16
- MicP
Re : petit problème avec un scrit shell
Bonjour
Grrr! ces ajouts automatiques des balises [url][/url] quand on copie/colle un lien…
=======
En réutilisant la formule sed de Watael :
michel@debbull:~$ cat icebergs_reported.txt
…
…
ci-dessus, les lignes qui étaient déjà présentes dans ce fichier
michel@debbull:~$
michel@debbull:~$ wget -qO - --no-check-certificate 'https://msi.nga.mil/api/publications/download?type=view&key=16694640/SFH00000/DailyMemLAN.txt' 2>/dev/null | sed -rn '/ICEBERGS REPORTED IN:/,+6{s/^ +[A-Z]\. +([^. [A-Z].*]*).*/\1/p;}' >> icebergs_reported.txt
michel@debbull:~$
michel@debbull:~$ cat icebergs_reported.txt
…
…
ci-dessus, les lignes qui étaient déjà présentes dans ce fichier
60-34S 047-55W.
60-59S 047-33W.
55-28S 027-10W.
66-02S 034-51W.
michel@debbull:~$
Dernière modification par MicP (Le 02/02/2022, à 21:23)
Hors ligne
#15 Le 02/02/2022, à 21:37
- Watael
Re : petit problème avec un scrit shell
pourquoi 6, au fait ? il y a parfois 7 positions*, de A à G.
ce n'est pas gênant de manquer la dernière position connue ?
je recommande plutôt :
sed -rn '/ICEBERGS REPORTED IN:/,/^^M/{ /^([0-9]|^M)/d; s/^ +[A-Z]\. +([^. [A-Z].*]*).*/\1/p;}'
^M avec la combinaison Ctrl-v Ctrl-M **
--
* si j'ai bien compris de quoi il s'agit
** et oui, les données sont au format W$.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#16 Le 03/02/2022, à 08:47
- Olivier31450
Re : petit problème avec un scrit shell
Un grand merci à tous.....ca marche!!!!
Hors ligne