Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 02/02/2022, à 11: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, à 11: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, à 11:16)


Connected \o/
Welcome to sHell. · eval is evil.

En ligne

#3 Le 02/02/2022, à 11: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 tongue
Je vais regarder de près ce que je peux faire avec awk
merci

Hors ligne

#4 Le 02/02/2022, à 11: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, à 12: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, à 12: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. hmm
ou utiliser un tournevis plat sur une vis cruciforme. mad

Dernière modification par Watael (Le 02/02/2022, à 12:49)


Connected \o/
Welcome to sHell. · eval is evil.

En ligne

#7 Le 02/02/2022, à 13: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

moko138 a écrit :

1) Les balises-code sont les < > (crochets bleus) de la barre de mise en forme.

1642675956.jpg

/!\  Si vous avez plusieurs retours à donner, séparez-les bien (toujours pour la lisibilité) :

comme
cela.
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, à 13:24)


Conseils pour les nouveaux demandeurs et pas qu'eux
Important : Pensez à passer vos sujets en [Résolu] 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, à 13: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, à 14:29

pingouinux

Re : petit problème avec un scrit shell

Olivier31450 #8 a écrit :

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, à 16: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, à 17: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.

En ligne

#12 Le 02/02/2022, à 20: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, à 20:25)

Hors ligne

#13 Le 02/02/2022, à 21: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.

En ligne

#14 Le 02/02/2022, à 22: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, à 22:23)

Hors ligne

#15 Le 02/02/2022, à 22: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.

En ligne

#16 Le 03/02/2022, à 09:47

Olivier31450

Re : petit problème avec un scrit shell

Un grand merci à tous.....ca marche!!!!

Hors ligne