shell脚本-用循环从a文本提取1,2,3...列数据重复替换b文本指定位置内容

xyq916 2019-06-17 04:38:27
shell脚本,我写了个循环,想用文本a.txt中第一行的4个数依次重复替换TBCxiug.dat文件中74行第2项的1530.00,脚本如下:
#!/bin/sh
b=1;
while [ $b -lt 5 ];
do
echo $b;
sed -i "s/`cat TBCxiug.dat |awk '{print $2 }'|awk 'NR==74{print}'`/`cat a.txt |awk '{print $b }'|awk 'NR==1{print}'`/g" TBCxiug.dat
b=`expr $b + 1`;
done

文本a.txt内容如下:
1.396336670E+003 1.389259766E+003 1.382734131E+003 1.378035278E+003
1.367266602E+003 1.362385010E+003 1.359675781E+003 1.359435425E+003
1.366114014E+003 1.373034912E+003 1.380192505E+003 1.388231079E+003

TBCxiug.dat部分内容如下:
69 *DEFINE T
70 *DESCRIPTION
71 *END DESCRIPTION
72 *PARAMETERS
73 TYPE NORMAL
74 MEAN 1530.00
75 STDEV 30.0000
76 *END PARAMETERS
77 *END DEFINE T
但结果好像写入一个数,而是把一整行数数都写进去了,如下:
循环1次的结果
*DEFINE T
*DESCRIPTION
*END DESCRIPTION
*PARAMETERS
TYPE NORMAL
MEAN 1.396336670E+003 1.389259766E+003 1.382734131E+003 1.378035278E+003
STDEV 30.0000
*END PARAMETERS
*END DEFINE T
循环4次的结果
*DEFINE T
*DESCRIPTION
*END DESCRIPTION
*PARAMETERS
TYPE NORMAL
MEAN 1.396336670E+003 1.389259766E+003 1.382734131E+003 1.378035278E+003
1.389259766E+003 1.382734131E+003 1.378035278E+003
1.389259766E+003 1.382734131E+003 1.378035278E+003
1.389259766E+003 1.382734131E+003 1.378035278E+003

STDEV 30.0000
*END PARAMETERS
后来我又把脚本中红色部分改成awk "{print \$$b }",结果形式看起来对的,但是写入TBCxiug中的数据并不是存在于a.txt中的数据,不知道哪里来的数,而且同一脚本每次运行,写入的数值还不一样!如下:
*END DESCRIPTION
*PARAMETERS
TYPE NORMAL
MEAN 56870
STDEV 30.0000
*END PARAMETERS
*END DEFINE T
求大神分析原因以及怎么改正!多谢!
...全文
61 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

18,772

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 专题技术讨论区
社区管理员
  • 专题技术讨论区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧