在Linux中,我有一个程序,当它经过一定数量的迭代时,它会稍微更改坐标列表。我可以使用grep -c来计算迭代次数,并且我想从该程序的输出中获取最后一组标签和坐标。
我的源文件看起来像这样:
text
total number of objects with coordinates = n
text
begin coordinates
label1 x1 y1 z1
label2 x2 y2 z2
...
labeln xn yn zn
end coordinates
text
text
begin coordinates
label1 a1 b1 c1
label2 a2 b2 c2
...
labeln an bn cn
end coordinates
text
text在本例中,我希望将标签集及其a、b和c坐标转储到一个文本文件中,如下所示:
label1 a1 b1 c1
label2 a2 b2 c2
...
labeln an bn cn我更喜欢使用grep或awk这样的工具来实现这一点,但我对它们还不够熟悉,无法实现这一点。
编辑:我忘记提到标签既不是常量也不是唯一的,所以label2可以等于label5或labeln。
发布于 2013-01-26 02:47:56
您将需要awk。
要获取模式范围的最后一个匹配项,请执行以下操作:
awk '/label1/ { r="" } /label1/,/labeln/ { r = ( r ? r RS : "") $0 } END { print r }' file要获取模式范围的第n个匹配项,请执行以下操作:
awk -v n=2 '/label1/ { f++; r="" } f { r = (r ? r ORS : "") $0 } /labeln/ && f==n { print r; f=0 }' file这将找到第二个匹配项(n=2),您可以轻松地对其进行修改以找到所需的匹配项。
编辑:
要获取模式范围的最后一个匹配项,请执行以下操作:
awk '/begin/ { f=1; r=""; next } f && !/end/ { r = (r ? r ORS : "") $0 } /end/ { f=0 } END { print r }' file要获取模式范围的第n个匹配项,请执行以下操作:
awk -v n=2 '/begin/ { f++; r=""; next } f && !/end/ { r = (r ? r ORS : "") $0 } /end/ && f==n { print r; r="" }' file这将找到第二个匹配项(n=2),您可以轻松地对其进行修改以找到所需的匹配项。HTH。
https://stackoverflow.com/questions/14527964
复制相似问题