如何在文件中剪切某些字段并在unix中插入另一个文件的中间

时间:2016-06-10 12:10:03

标签: xml shell awk scripting

我的文件如下“|”分隔。

1234|This is Line 1|Yes
5678|This is Line 2|Yes
9999|This is Line 3|Yes

我已经有了一个XML文件,我想在不同的位置插入第1,第2,第3列,并为每行创建1个XML文件,如下所示

<tag1>1234</tag1> 
<tag2> This is line 1 </tag2>
<tag3> Yes </tag3>

基本上我想从第一个文件中读取每一行,并通过在不同位置插入字段为每一行创建一个XML文件。任何有关如何在shell脚本中执行此操作的帮助都会有很大帮助

我尝试了这个,但for循环没有正确读取第二列(“这是第1行”)。它将每个空格作为一个字段并创建多个文件

  for i in `cat file | awk -F"|" '{print $1}'`
    do
    echo $i
    j=`cat addxml | grep "tag2" | awk -F ">" -v var="$i" '{print $1">"var$2">"}'`
    sed 's|<tag2></tag2>|'"${j}"'|g' addxml > input1.xml
    done

1 个答案:

答案 0 :(得分:3)

请说......

awk -F"|" '{file="file_"NR
            for (i=1;i<=3;i++) 
                printf "<tag%d>%s</tag%d>\n", i, $i, i >> file
           }' file

所以你有这样的文件:

$ tail file*
==> file_1 <==
<tag1>1234</tag1>
<tag2>This is Line 1</tag2>
<tag3>Yes</tag3>

==> file_2 <==
<tag1>5678</tag1>
<tag2>This is Line 2</tag2>
<tag3>Yes</tag3>

==> file_3 <==
<tag1>9999</tag1>
<tag2>This is Line 3</tag2>
<tag3>Yes</tag3>