awk(或sed / python)跳过行重新编号列

时间:2017-02-22 21:44:59

标签: python awk sed

我需要帮助重新编号元素。我有一个输入文件,如下面的小样本(节点和元素可能在1000的)。我需要一个代码跳过所有节点并从第一个元素开始,然后我需要为所有元素添加一个整数。 IE:元素658 = 1658,659 = 1659等.... 一切都需要输出到一个新文件中,唯一的区别是元素的重新编号。 我尝试用awk命令执行此操作,下面的代码,不能完全得到它。有人可以帮忙吗? python还是sed更好?感谢

*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

2 个答案:

答案 0 :(得分:2)

您可以使用sed '/ELEMENT/,$s/^ \([0-9]\)/ 1\1/' test.msh 中的address range执行此操作:

/ELEMENT/,$

范围sed '/ELEMENT/,$s/ \([0-9]\)/ 1\1/g' test.msh 表示从第一次出现的&#34; ELEMENT&#34;直到文件结束。剩下的只是一个简单的substitution back reference,假设你的空白是一致的。

重新阅读您的问题,如果您想更改所有数字,或者只是更改每行上的第一个数字,您就不清楚了。如果你想要替换所有这些,这应该有效:

Enum.Parse(Type enumType, string value)

答案 1 :(得分:1)

awk digit=1 \
    'adjust    { $1 = digit $1 } \
     /ELEMENT/ { adjust = 1 } \
               { print }'

如果进行调整,请将digit连接到第一个元素。当ELEMENT出现在一条线上时打开调整。打印一切。