bash - 循环读取文件并使用 shell 将其写入另一个文件
问题描述
我有一个 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
当我尝试运行我的代码时,我没有得到我上面提到的可能输出。谁能告诉我我的代码有什么问题?
解决方案
问题是您awk
在循环内调用。让我们awk
做循环。
看看awk中的“NR==FNR”是什么?了解该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
推荐阅读
- python - python3 os moudle的路径拼接错误?
- apache-spark - 将数据存储到 PySpark (Azure - DataBricks) 中的数据库非常慢
- ios - 在 PieChartView 中仅显示来自 (key, value) 的数字
- python - guizero 中的数组问题
- jquery - 如何在 Laravel 中编写正确的 AJAX URL
- html - 如何在列表中的文本之后对齐按钮,使它们在同一列中?
- javascript - 如何根据显示的对象在点击时显示不同的文本?
- windows - Windows 中移动 phar 文件的 SUDO 命令的等效项是什么
- c# - Mircorsoft graphi Api,邀请被拒绝,因为它发生在过去
- javascript - 使用 at.js 在 Angular js 中进行 @name 标记