|

楼主 |
发表于 2005-12-12 22:07:07
|
显示全部楼层
Post by kayue
可以考虑下面这两个方法:
1 如你所说,只是在awk内部引用外部变量要加单引号,我稍作修改,你看可以不?
你应该要注意下变量的表示,比如B$dir.charge,谁知道dir是变量,还是dir.charge
是变量??亦或是dir.c??应该用大括号括起来,这样可读性好,也不容易出错。
- number=`cat B${dir}.charge|wc -l`
- number=`expr $number + 8 `
- awk '{if (NR>7&&NR<'$number'){getline $9<"'B${dir}.charge'";print} else print}' tmp2.B${dir}.mol2 >B${dir}.mol2
复制代码
2 可以不在awk中指定要替换的范围的上界(最大值),如下:
- #awk '{if (NR>7){getline $9<"a2.file";print} else print}' a1.file
复制代码
它会自动根据a2.file文件中行数进行替换,如果a2.file所有行都已经在a1.flle中替换,
那么后面的部分就不会再继续进行了,你只要保存每个a1.file中要替换的行数和对应的
a2.file的行数相同就可以了。
另外,注意,使用脚本批量进行处理时最好先备份下原来数据,除非你确认脚本完全没错,
否则数据一般较难恢复回来。
:thank kayue,方法1可以在批处理中使用,你的解释让我对变量的使用清楚了一些,开心:)
方法2在单个文件中可以正常使用,但放在批处理中时无法执行把a2.file粘贴到a1.file的相应位置。 |
|