【问题标题】:Loop to read from the file and write it to another file using shell循环读取文件并使用 shell 将其写入另一个文件
【发布时间】:2019-08-23 05:16:36
【问题描述】:

我有一个 xml 文件,其中包含以下内容

<SummaryRecordMapping>
<eName>Licensed Original MC TPE EXCESSIVE AUTH</eName>
<jobs>
<job>

<SummaryRecordMapping>
<eName>Licensed Reversal MC TPE EXCESSIVE AUTH</eName>
<jobs>
<job>

我想要像下面这样的输出

<SummaryRecordMapping>
<eName>Licensed Original MC This is New Deep</eName>
<jobs>
<job>

<SummaryRecordMapping>
<eName>Licensed Reversal MC This is New Deep</eName>
<jobs>
<job>

<SummaryRecordMapping>
<eName>Licensed Original MC This is Mayurika</eName>
<jobs>
<job>

<SummaryRecordMapping>
<eName>Licensed Reversal MC This is Mayurika</eName>
<jobs>
<job>

代码

#!/bin/bash
while read whole_line ;
do
name=`echo "$whole_line" | awk '{$1=""; print}'`
LO="<eName>Licensed Original MC ${name}</eName>"
awk -v diff="$LO" '{ if(NR==2) { print diff}
                              else {print $0} } ' southBalanceRecon.xml >>LO.xml

LR="<eName>Licensed Reversal MC ${name}</eName>"
awk -v diff="$LR" '{ if(NR==14) { print diff}
                              else {print $0} } ' LO.xml >> LR.xml
done < file.txt

文件.txt

C71 This is New Deep
C72 This is Mayurika

当我尝试运行我的代码时,我没有得到我上面提到的可能的输出。 谁能告诉我我的代码有什么问题?

【问题讨论】:

    标签: bash shell unix awk


    【解决方案1】:

    问题是你在循环中调用awk。让awk 进行循环。

    查看What is "NR==FNR" in awk? 以了解NR==FNR 部分。

    awk 'NR==FNR { a[NR]=$0; next }
         {
            $1=""
            for (i=1; i<=length(a); i++)  {
               if (i==2)
                  print "<eName>Licensed Original MC" $0 "</eName>";
               else if (i==7)
                  print "<eName>Licensed Reversal MC" $0 "</eName>";
               else
                  print a[i];
            }
         }' southBalanceRecon.xml file.txt
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-10-05
      • 2015-12-29
      • 2021-04-24
      • 1970-01-01
      • 2021-01-23
      • 1970-01-01
      • 2018-06-27
      相关资源
      最近更新 更多