2017-02-22 67 views
2

我需要重新編號元素的幫助。我有一個輸入文件,如下面的小樣本(節點和元素可能在1000年)。我需要一個跳過所有節點並從第一個元素開始的代碼,此時我需要爲所有元素添加一個整數。 IE:元素658 = 1658,659 = 1659等.... 所有內容都需要輸出到一個新文件中,唯一的區別是元素的重新編號。 我試着用awk命令這樣做,下面的代碼,不能完全得到它。有人可以幫忙嗎? python還是sed更好?由於awk(或sed/python)跳過行重新編號列

*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 

代碼:

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

[編輯]你的問題,包括給你的貼樣本輸入預期的輸出。 –

+0

如果我的回答對您有所幫助,請參閱http://stackoverflow.com/help/someone-answers。謝謝! – miken32

回答

2

可以在sed使用address range做到這一點:

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

範圍/ELEMENT/,$意味着從 「元素」 的第一次出現,直到搜索文件的結尾。其餘的只是一個簡單的substitutionback reference,假設你的空白是一致的。

重讀你的問題,你,如果你想改變所有的數字,或者只是在每一行的第一個不明確。如果您要更換所有的人,這應該工作:

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

如果調整,串聯digit的第一個元素。當ELEMENT出現在一行上時打開調整。打印一切。