用于读取文件并在其他文件

时间:2018-05-08 06:39:03

标签: xml bash shell

在这种情况下,有2个输入:

  1. 主要数据文件(tab-separated txt
  2. 模板文件
  3. 主数据txt文件如下所示

    abc paris
    xyz london
    jkl dubai
    

    此处的要求是将输出文件作为模板填充主数据文件中的数据。

    inputdir="/home/InputFile"
    for line in $(cat $inputdir/$1)
    do
    content=${line}
    name=$(echo $content|awk -F'\t' '{print $1}')
    place=$(echo $content|awk -F'\t' '{print $2}')
    echo "$name"
    echo "$place"
    done
    

    请建议最好的方法来完成它并将此内容复制到输出文件将是XML,如下所示:

    <ROOT>
        <FileHeader>
            <name>abc</name> --this_is input of contents copied from above script
        </FileHeader>
        <FileDetail>
            <place>paris</place> --this_is input of contents copied from above script
        </FileDetail>
    
        <FileHeader>
            <name>xyz</name>
        </FileHeader>
        <FileDetail>
            <place>london</place>
        </FileDetail>
    
        <FileHeader>
            <name>jkl</name>
        </FileHeader>
        <FileDetail>
            <place>dubai</place>
        </FileDetail>
    </ROOT>
    

1 个答案:

答案 0 :(得分:1)

您可以使用以下脚本:

#!/usr/bin/env bash                                                      

while read line; do                                                      
    word1=$(sed "s/^\(\S*\).*/\1/" <<< "$line")                          
    word2=$(sed "s/.*\s\(\S.*\)$/\1/" <<< "$line")                       
    sed -i'' "0,/<name></s/<name></<name>$word1</" outputfile            
    sed -i'' "0,/<place></s/<place></<place>$word2</" outputfile         
done < inputfile  

此处inputfile包含由空格或制表符分隔的单词列表:

abc paris
xyz london
jkl dubai

outputfile最初是:

<ROOT>                                                                   
    <FileHeader>                                                         
        <name></name>                                                       
    </FileHeader>                                                        
    <FileDetail>                                                         
        <place></place>                                                     
    </FileDetail>                                                        

    <FileHeader>                                                         
        <name></name>                                                    
    </FileHeader>                                                        
    <FileDetail>                                                         
        <place></place>                                                  
    </FileDetail>                                                        

    <FileHeader>                                                         
        <name></name>                                                    
    </FileHeader>                                                        
    <FileDetail>                                                         
        <place></place>                                                  
    </FileDetail>                                                        
</ROOT>

运行脚本后,outputfile变为:

<ROOT>                                                                      
    <FileHeader>                                                            
        <name>abc</name>                                                    
    </FileHeader>                                                           
    <FileDetail>                                                            
        <place>paris</place>                                                
    </FileDetail>                                                           

    <FileHeader>                                                            
        <name>xyz</name>                                                    
    </FileHeader>                                                           
    <FileDetail>                                                            
        <place>london</place>                                               
    </FileDetail>                                                           

    <FileHeader>                                                            
        <name>jkl</name>                                                    
    </FileHeader>                                                           
    <FileDetail>                                                            
        <place>dubai</place>                                                
    </FileDetail>                                                           
</ROOT>