2016-07-05 68 views
1

我有我出口链接格式如下转换文本文件到XML文件(标题&& URL)

Cover-ups http://example.com/1 
One-pieces http://example.com/2 
Sarongs http://example.com/3 

如何使用一个awk命令或类似的东西,像这样以格式化的文本文件

<link> 
    <title>Cover-ups</title> 
    <url>http://example.com/1</url> 
</link> 

<link> 
    <title>One-pieces</title> 
    <url>http://example.com/2</url> 
</link> 

<link> 
    <title>Sarongs</title> 
    <url>http://example.com/3</url> 
</link> 

回答

1

看一看:

把数据变成XML

http://www.mailsend-online.com/blog/converting-data-to-xml-with-awk.html

这应该让你开始:

BEGIN { 
    FS="|"; 
    printf("<?xml version=\"1.0\" ?>\n"); 
} 

NF==1 { 
    printf("<link>\n"); 
    split($1, a, " "); for (i in a) { 
    if (i == 1) 
     printf("<url>%s</url>\n", a[2]); 
    if (i == 2) 
     printf("<title>%s</title>\n", a[1]); 
    } 
    printf("</link>\n"); 
} 

END { 
} 

输出:

<?xml version="1.0" ?> 
<link> 
    <title>Cover-ups</title> 
    <url>http://example.com/1</url> 
</link> 
<link> 
    <title>One-pieces</title> 
    <url>http://example.com/2</url> 
</link> 
<link> 
    <title>Sarongs</title> 
    <url>http://example.com/3</url> 
</link> 
+1

我最终得到我自己的解决方案感谢您链接的文档非常感谢。请重新编辑它,如果你有机会 – NooBskie

+0

@gotnull,将FS更改为|并使用默认的FS分手手段不是很明确... ... - – JJoao

1

您的文本文件:

[email protected]:/mnt$ cat 1 
Cover-ups http://example.com/1 
One-pieces http://example.com/2 
Sarongs http://example.com/3 

我的shell脚本:

#!/bin/sh 
while read line 
do 
tmp1=$(echo $line|awk '{print $1}') 
tmp2=$(echo $line|awk '{print $2}') 

cat >> output << EOF 
<link> 
    <title>${tmp1}</title> 
    <url>${tmp2}</url> 
</link> 

EOF 
done < 1 

输出

[email protected]:/mnt$ cat output 

<link> 
    <title>Cover-ups</title> 
    <url>http://example.com/1</url> 
</link> 

<link> 
    <title>One-pieces</title> 
    <url>http://example.com/2</url> 
</link> 

<link> 
    <title>Sarongs</title> 
    <url>http://example.com/3</url> 
</link> 
0

1:又一个awk中oneliner:

awk '{printf "<link>\n<title>%s</title>\n<url>%s</url>\n</link>\n\n",$1,$2}' 

2:在我用以下awk中哲学Perl版本类似的情况(此时生成有效的XML)

#!/usr/bin/perl -na 

use XML::Writer::Simple tags => [qw/refs link title url/], partial=>1 ; 

BEGIN{ print xml_header,start_refs; } 
    { print link(title($F[0]),url($F[1])),"\n";} 
END { print end_refs; } 

生产:

$perl links2xml mylinks 

<?xml version="1.0"?> 
<refs> 
<link><title>Cover-ups</title><url>http://example.com/1</url></link> 
<link><title>One-pieces</title><url>http://example.com/2</url></link> 
<link><title>Sarongs</title><url>http://example.com/3</url></link> 
</refs> 

选项-na令Perl的行为模式在awk方式( while(line=<>){F=split(line); BODY}

如果需要使用CPAN(sudo cpan XML::Writer::Simple)安装模块,apt-get或者类似