Afficher des ligne par rapport à un mot

wtfunix Messages postés 52 Statut Membre -  
wtfunix Messages postés 52 Statut Membre -
Bonjour j'aimerai savoir comment afficher deux lignes par rapport à un mot. Par exemple, le fichier " parametre1" est le suivant :

nom: 2014_MA6
date : 2014-07-23T00:00:00
step: 5min
nombre de step: 300
fin de step 1
2014-07-23T01:00:00.00 16 42 35.95507 +54 55 43.1304 0.048711400 20.90 84.17 93.09 0.4118E+00 0.6414E+01 0.00027
fin de step 2

nom : 3981_88
date : 2014-08-12T00:00:00
step: 5min
nombre de step: 300
fin de step 1
Miriade.ephemcc: computeEphemeris: Asteroid 3981 88 not found in the database: /astrodata/ASTORB/astorb.dat -> skipped
fin de step 2

nom : 3574_39
date : 2015-01-26T00:00:00
step: 5min
nombre de step: 300
fin de step 1
Miriade.ephemcc: computeEphemeris: Asteroid 3574 39 not found in the database: /astrodata/ASTORB/astorb.dat -> skipped
fin de step 2


et j'aimerai dire que si il est affiché Asteroid not found in the database alors on affiche le nom la date le step et le nombre de step. Ces parametres sont déjà défini dans un script par les appellations $asteroid $date $step $nbstep

J'ai donc écris le programme suivant :

cat parametre1 | awk '{ 
if (grep not found)
{
print $asteroid $date $step $nbstep
}}'> ok
cat ok

Cependant rien ne m'affiche, je sais que c'est au niveau du "grep" que ça ne fonctionne pas pourtant lorsque que l'on veut sélectionner une ligne comportant un mot on utilise bien grep ' motvoulu '..

Merci d'avance

2 réponses

  1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
     
    Salut,

    $ grep -B5 'Asteroid.* not found' fichier | grep -v 'Asteroid\|fin'
    nom : 3981_88
    date : 2014-08-12T00:00:00
    step: 5min
    nombre de step: 300
    --
    nom : 3574_39
    date : 2015-01-26T00:00:00
    step: 5min
    nombre de step: 300

    0
  2. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    hello
    $ awk '{t[NR]=$0} /Asteroid.*not found/ {for(n=5; n>1;)print t[NR-n--]; print ""}' fichier
    nom : 3981_88
    date : 2014-08-12T00:00:00
    step: 5min
    nombre de step: 300

    nom : 3574_39
    date : 2015-01-26T00:00:00
    step: 5min
    nombre de step: 300
    0
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      Salut dubcek,

      Tiens j'avais fait ça :

      awk 'BEGIN { RS = "\n\n"; FS=OFS= "\n" } /Asteroid.*not found/ { print $1,$2,$3,$4,"--"}'

      Qu'est-ce qu'il en pense notre pro du awk ? ;-)
      0
    2. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
       
      toutes les méthodes qu fonctionnent sont bonnes...
      je me méfie des lignes vides comme séparateurs, on n'est jamais sur qu'elles restent vides ...
      0
    3. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      Merci bien ;-)
      0
    4. wtfunix Messages postés 52 Statut Membre
       
      Merciiiiii beaucoup c'est parfait !!! =D
      Vous êtes des pros de la prog !!
      0
    5. wtfunix Messages postés 52 Statut Membre
       
      Une dernière petite question, comment pourrais je faire pour afficher le nom, la date le step et le nombre de step dans une variable? En fait je voudrai lancer un autre fichier " horizon" à partir de celui ci. Le fichier "horizon" se présente sous cette forme :

      !$$SOF
      COMMAND= 'DES=2011 PU1'
      CENTER= '500@399'
      MAKE_EPHEM= 'YES'
      TABLE_TYPE= 'OBSERVER'
      START_TIME= '2014-07-16'
      STOP_TIME= '2014-07-18'
      STEP_SIZE= '5 m'
      CAL_FORMAT= 'CAL'
      TIME_DIGITS= 'MINUTES'
      ANG_FORMAT= 'HMS'
      OUT_UNITS= 'KM-S'
      RANGE_UNITS= 'AU'
      APPARENT= 'AIRLESS'
      SOLAR_ELONG= '0,180'
      SUPPRESS_RANGE_RATE= 'NO'
      SKIP_DAYLT= 'NO'
      EXTRA_PREC= 'NO'
      R_T_S_ONLY= 'NO'
      REF_SYSTEM= 'J2000'
      CSV_FORMAT= 'NO'
      OBJ_DATA= 'YES'
      QUANTITIES= '1,3,9,20,23,24'
      !$$EOF

      Les données en gras sonr respectivement le nom et la date et le step , comment pourrais je faire pour remplacer le nom et la date et le step dans le fichier "horizon" pour chacun des paramètre suivant que j'obtenais avant:
      nom : 3981_88
      date : 2014-08-12T00:00:00
      step: 5min
      nombre de step: 300

      nom : 3574_39
      date : 2015-01-26T00:00:00
      step: 5min
      nombre de step: 300

      Merci d'avance
      0