2017-02-22 3 views
2

Ich brauche Hilfe Neunummerierung Elemente. Ich habe eine Eingabedatei wie das kleine Beispiel unten (Knoten und Elemente könnten in den 1000ern sein). Ich brauche einen Code, der alle Knoten überspringt und mit dem ersten Element beginnt. An diesem Punkt muss ich eine ganze Zahl zu allen Elementen hinzufügen. IE: Element 658 = 1658, 659 = 1659, etc .... Alles muss in eine neue Datei ausgegeben werden, die einzigen Unterschiede sind die Neunummerierung der Elemente. Ich habe versucht, dies mit dem Befehl awk, Code unten, kann es nicht ganz bekommen. Kann jemand helfen? Ist Python oder Sed besser? Dankawk (oder sed/python) Zeilen überspringen, um eine Spalte neu zu nummerieren

*NODE, NSET=Nvolc 
    1,6.106226635438e-16,0.000000000000e+00,1.000000000000e+01 
    2,6.106226635438e-16,0.000000000000e+00,-1.000000000000e+01 
    3,5.481726184087e-16,0.000000000000e+00,9.000000000000e+00 
*ELEMENT, TYPE=C3D4, ELSET=Evolc 
    658, 58, 193, 148, 113 
    659, 154, 81, 215, 119 
    660, 228, 58, 148, 36 
    661,  7, 131, 146, 302 

Code:

awk 'NR==1{print}' test.msh > test2.msh | nawk -v number=500 'NR <= 2 { next } BEGIN{FS=OFS=","} {$1=number;print;number++;print}' test.msh > test2.msh 
+0

[bearbeiten] Sie Ihre Frage, um die erwartete Ausgabe bei Ihrer Posted-Input-Eingabe einzuschließen. –

+0

Wenn meine Antwort hilfreich war, siehe http://stackoverflow.com/help/someone-answers. Vielen Dank! – miken32

Antwort

2

Sie ein address range in sed verwenden können, dies zu tun:

sed '/ELEMENT/,$s/^ \([0-9]\)/ 1\1/' test.msh 

Der Bereich /ELEMENT/,$ bedeutet aus dem ersten Auftreten von "Elemente" zu suchen, bis das Ende der Datei. Der Rest ist nur eine einfache substitution mit back reference, die davon ausgeht, dass Ihr Leerzeichen konsistent ist.

Wenn Sie Ihre Frage erneut lesen, sind Sie nicht sicher, ob Sie alle Zahlen ändern möchten oder nur die erste in jeder Zeile. Wenn Sie alle von ihnen ersetzt werden soll, sollte diese Arbeit:

sed '/ELEMENT/,$s/ \([0-9]\)/ 1\1/g' test.msh 
1
awk digit=1 \ 
    'adjust { $1 = digit $1 } \ 
    /ELEMENT/ { adjust = 1 } \ 
       { print }' 

Wenn Einstellung verketten digit auf das erste Element. Aktivieren Sie die Einstellung, wenn in einer Zeile ELEMENT angezeigt wird. Alles drucken.

Verwandte Themen