PDA

Visualizza la versione completa : Bash: da file estrarre intervallo di righe contenente determinate parole


alessandro_dr
26-04-2010, 22:36
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

mxa
27-04-2010, 02:57
#!/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.

alessandro_dr
27-04-2010, 08:58
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

toraz
27-04-2010, 12:04
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...

alessandro_dr
27-04-2010, 15:06
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

mxa
27-04-2010, 15:20
@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.

Loading