d的转换

2024-10-04 05:30:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下格式的数据:

输入数据:

 <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来做到这一点吗?这里我希望输入数据的最后一列显示为第一行,输出数据中有#@


Tags: 数据orgcomidhttpwwwgooglecode
1条回答
网友
1楼 · 发布于 2024-10-04 05:30:50

考虑到有些数据看起来并不完全是表格形式,我会将其视为纯文本,并使用regex手动隔离最后两个字段,以避免修剪有意义的空白

对于GNU sed,这可能如下所示:

sed -r 's/^(.*\S)\s+(\S+)\s+(\S+)$/#@ \2\n\1 \3/' filename

\s\S是GNU扩展,分别匹配空白和除空白以外的所有内容;剩下的只是将行拆分为捕获组,并在打印前重新组装。注意,这将删除第三个到最后一个字段和最后一个字段(行末尾的.)之间多余的空白。根据您的示例输出,这似乎是您想要的

如果不担心空格修剪,那么

awk '{ print "#@ " $(NF - 1); $(NF - 1) = $NF;  NF; print }' filename

似乎是一个明智的方式来做这件事(g | m)awk

相关问题 更多 >