我有以下格式的数据:
输入数据:
<http://A> <http://code.google.com/p/ldspider/ns#headerInfo> _:H <id_0> .
<id_0> <C> <http://A> <id_1> .
_:H <http://www.w3.org/2006/http#responseCode> "200"^^<http://www.w3.org/2001/XMLSchema#integer> <id_2> .
<id_2> <C> <http://A> <id_3> .
_:H <http://www.w3.org/2006/http#date> "Mon, 23 Apr 2012 13:49:27 GMT" <id_4> .
<id_4> <C> <http://A> <id_5> .
_:H <http://www.w3.org/2006/http#content-type> "application/rdf+xml; charset=UTF-8" <id_6> .
我要将此数据转换为以下形式:
输出数据:
#@ <id_0>
<http://A> <http://code.google.com/p/ldspider/ns#headerInfo> _:H .
#@ <id_1>
<id_0> <C> <http://A> .
#@ <id_2>
_:H <http://www.w3.org/2006/http#responseCode> "200"^^<http://www.w3.org/2001/XMLSchema#integer> .
#@ <id_3>
<id_2> <C> <http://A> .
#@ <id_4>
_:H <http://www.w3.org/2006/http#date> "Mon, 23 Apr 2012 13:49:27 GMT" .
#@ <id_5>
<id_4> <C> <http://A> .
#@ <id_6>
_:H <http://www.w3.org/2006/http#content-type> "application/rdf+xml; charset=UTF-8" .
我知道我可以用c++通过解析文件轻松地做到这一点,但是我也可以用awk等linux命令或python来做到这一点吗?这里我希望输入数据的最后一列显示为第一行,输出数据中有#@
考虑到有些数据看起来并不完全是表格形式,我会将其视为纯文本,并使用regex手动隔离最后两个字段,以避免修剪有意义的空白
对于GNU sed,这可能如下所示:
\s
和\S
是GNU扩展,分别匹配空白和除空白以外的所有内容;剩下的只是将行拆分为捕获组,并在打印前重新组装。注意,这将删除第三个到最后一个字段和最后一个字段(行末尾的.
)之间多余的空白。根据您的示例输出,这似乎是您想要的如果不担心空格修剪,那么
似乎是一个明智的方式来做这件事(g | m)awk
相关问题 更多 >
编程相关推荐