2017-02-22 10 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

Вы можете использовать address range в sed, чтобы сделать это:

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

Диапазон /ELEMENT/,$ означает поиск с первого появления "ЭЛЕМЕНТ" до конец файла. Остальное просто substitution с back 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. Распечатайте все.

Смежные вопросы