Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    Bash: da file estrarre intervallo di righe contenente determinate parole

    Ciao a tutti e grazie per l'attenzione.
    Ho un file di testo così fatto:
    *Heading
    ** Job name: ImpattoBall Model name: rete_3000_MEL_2
    ** Generated by: Abaqus/CAE Version 6.8-1
    *Preprint, echo=NO, model=NO, history=NO, contact=NO
    **
    ** PARTS
    **
    *Part, name=Masso
    *Node
    1, 0., -0.985796273, 0.
    2, 0., 0.985796213, 0.
    3, 1., -4.20298851e-10, 0.
    ...
    ...
    6990, 1.52815163, -0.24457036, -0.000728682731
    *Element, type=B31
    ....
    ....
    Ora, io vorrei salvare in un nuovo file di testo solo una porzione di questo file, cioè quella che va dalla riga dove c'è "*Node" a quella dove c'è "*Element, type=B31", entrambe escluse dal nuovo file.
    Potete aiutarmi?
    Grazie

  2. #2
    codice:
    #!/bin/bash
    
    #input file come primo param dello script
    INPUT_FILE=$1
    
    #output file come secondo param dello script
    OUTPUT_FILE=$2
    
    NODE=`grep -n *Node $INPUT_FILE | cut -d ":" -f 1`
    ELEMENT=`grep -n *Element $INPUT_FILE | cut -d ":" -f 1`
    
    DIFF=$(($ELEMENT-$NODE))
    
    tail -n +9 $INPUT_FILE | head -n 7 > $OUTPUT_FILE
    non ho provato ma dovrebbe piu' o meno andare.
    max

    Silence is better than bullshit.
    @mmarcon
    jHERE, Maps made easy

  3. #3
    Ciao, per prima cosa grazie della risposta. Mi dispiace ma non va...ho un output di questo tipo
    *Node
    1, 1.02083337, 0.
    2, 1.04166663, 0.
    3, 1.0625, 0.
    4, 1.08333337, 0.
    5, 1.10416663, 0.
    6, 1.125, 0.
    Mentre io ne volevo uno del tipo
    1, 0., -0.985796273, 0.
    2, 0., 0.985796213, 0.
    3, 1., -4.20298851e-10, 0.
    ...
    ...
    6990, 1.52815163, -0.24457036, -0.000728682731

  4. #4
    Utente di HTML.it L'avatar di toraz
    Registrato dal
    Nov 2001
    Messaggi
    263
    codice:
    sed -ne '/Node/,/Element/p' file_vecchio | head -n-1 | tail -n+2 > file_nuovo
    Mi pare più semplice.
    Probabilmente si può fare anche solo con sed, ma non mi viene in mente come...

  5. #5
    Grazie della risposta, ma ho risolto così:

    sed -n -e '/Node/,/Element/p' $INPUT_FILE > $OUTPUT_FILE
    sed -i -e '/Node/d' $OUTPUT_FILE
    sed -i -e '/Element/d' $OUTPUT_FILE

    Ciao

  6. #6
    @alessadro_dr
    ovviamente il mio script non andava, nell'ultima riga ho dimenticato di sostituire i numeri che avevo messo per fare una prova con le variabili calcolate precedentemente

    @toraz
    ovviamente sed e' la soluzione migliore. ma non sono esperto di sed, per quello ho optato per l'altra strada.
    max

    Silence is better than bullshit.
    @mmarcon
    jHERE, Maps made easy

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.