我知道这个话题已被覆盖了几次,但我找不到适用于我的案例。我不是一个经验丰富的计算机用户,请记住,虽然我可以玩bash,R,也可能运行perl脚本。仅供参考 - 我在我的机器上运行Ubuntu。
我想要做的是转换以下网页http://www.genome.jp/kegg-bin/get_htext?br08902.keg的可展开列表(请使用"一键式模式"完全展开)为表格或csv格式,每个级别的缩进都转到一个单独的列。
对于在其下方分组的所有元素重复父类别也不会那么糟糕。类似下面的标签,我手动为页面的前几行。
Pathways and Ontologies Pathways br08901 KEGG pathway maps
Pathways and Ontologies Functional hierarchies br08902 BRITE functional hierarchies
Genes and Proteins Orthologs and modules ko00001 KEGG Orthology (KO)
Genes and Proteins Orthologs and modules ko00002 KEGG pathway modules
Genes and Proteins Orthologs and modules ko00003 KEGG modules and reaction modules
Genes and Proteins Protein families: metabolism ko01000 Enzymes
Genes and Proteins Protein families: metabolism ko01001 Protein kinases
Genes and Proteins Protein families: metabolism ko01009 Protein phosphatases and associated proteins
Genes and Proteins Protein families: metabolism ko01002 Peptidases
Genes and Proteins Protein families: metabolism ko01003 Glycosyltransferases
Genes and Proteins Protein families: metabolism ko01005 Lipopolysaccharide biosynthesis proteins
Genes and Proteins Protein families: metabolism ko01004 Lipid biosynthesis proteins
提前致谢!
答案 0 :(得分:2)
此任务需要一些分离良好的步骤。击穿:
获取页面内容。您可以使用例如curl
或wget
或fetch
或类似程序。 E.g。
curl http://...
将下载页面内容。
在您的页面中,存在一个“download htext”链接。当您检查它指向的位置时,您会发现需要从链接中下载
http://www.kegg.jp/kegg-bin/download_htext?htext=br08902.keg&format=htext&filedir=
^^^^^^^^^^^ name of your needed keg
之后
curl "http://www.kegg.jp/kegg-bin/download_htext?htext=br08902.keg&format=htext&filedir=" > mykeg.txt
将获得下一个文件:(缩写)
+C Br number
#<h2><a href="/kegg/kegg2.html"><img src="/Fig/bget/kegg3.gif" align="middle" border=0></a> BRITE Functional Hierarchies</h2>
#<!---
#ENTRY br08902
#NAME Brite
#DEFINITION BRITE functional hierarchies
#--->
!
A<b>Pathways and Ontologies</b>
B Pathways
C br08901 KEGG pathway maps
B Functional hierarchies
C br08902 BRITE functional hierarchies
#
A<b>Genes and Proteins</b>
B Orthologs and modules
C ko00001 KEGG Orthology (KO)
C ko00002 KEGG pathway modules
这是一个很好的文本文件,大多没有HTML标记。使用常见的bash工具轻松解析。
首先清理一下:
使用sed
命令删除所有不需要的行
sed '/^[#!+]/d'
删除不需要的html标记(通常不可能使用正则表达式,但在这种情况下可能)
sed 's/<[^>]*>//g'
将分隔符添加到前导字符
sed 's/^./& /'
在上面之后,你得到一个像下一个
的文本A Pathways and Ontologies
B Pathways
C br08901 KEGG pathway maps
B Functional hierarchies
C br08902 BRITE functional hierarchies
A Genes and Proteins
B Orthologs and modules
C ko00001 KEGG Orthology (KO)
C ko00002 KEGG pathway modules
C ko00003 KEGG modules and reaction modules
什么是bash
的漂亮,可解析的结构while read -r prefix content
do
echo "do something with a line >>$content<< with a prefix >>$prefix<<"
done
您可以使用prefix
命令测试case
,例如:
case "$prefix" in
A) a="$content" ;;
B) b="$content" ;;
C) c="$content" ;;
esac
使用associative arrays
存在更好的替代方案,但上述内容很简单且有效......
您现在拥有制作有效解决方案所需的所有信息(8行)。
接下来取决于你......;)
通常我不做整个工作,因为stackoverflow不是一个自由编程服务,但是好的 - 这是脚本:
kegfile="KEG"
while read -r prefix content
do
case "$prefix" in
A) col1="$content" ;;
B) col2="$content" ;;
C) echo -e "$col1\t$col2\t$content";;
esac
done < <(sed '/^[#!+]/d;s/<[^>]*>//g;s/^./& /' < "$kegfile")