LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
12
返回列表 发新帖
楼主: irene

【完成】求教:如何将一个文件的数据全部放到另一个文件指定位置

[复制链接]
 楼主| 发表于 2005-12-12 22:07:07 | 显示全部楼层
Post by kayue
可以考虑下面这两个方法:
1 如你所说,只是在awk内部引用外部变量要加单引号,我稍作修改,你看可以不?
你应该要注意下变量的表示,比如B$dir.charge,谁知道dir是变量,还是dir.charge
是变量??亦或是dir.c??应该用大括号括起来,这样可读性好,也不容易出错。


  1. number=`cat B${dir}.charge|wc -l`
  2. number=`expr $number + 8 `
  3. awk '{if (NR>7&&NR<'$number'){getline $9<"'B${dir}.charge'";print} else print}' tmp2.B${dir}.mol2 >B${dir}.mol2

复制代码



2 可以不在awk中指定要替换的范围的上界(最大值),如下:

  1. #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的相应位置。
回复 支持 反对

使用道具 举报

发表于 2005-12-13 05:46:16 | 显示全部楼层
Post by irene
To yongjian:
  先谢谢你的回复。你给的语句我的理解是:把文件a1.file中关于0.0000的所有行用空格代替,然后把文件a2.file粘贴到此处。
  问题1:当我运行此语句时,仅cat a2.file起作用,a2.file的内容显示在当前屏幕。
  问题2:paste命令能够将a2.file粘贴到前面删除的那些数据的位置上吗?起这个作用的命令我未查到。

1. sed掉并不是用空格代替,就是删除了。
2。 注意是
  1. paste - a2.file
复制代码
. 有一个“-”在那里,表示paste接受的第一个参数是pipeline进来的。
EDIT: 我注意到你貼的文件的格式变了,并不是你最先貼的情况,所以匹配出了问题。按照现在的格式,是这样:
  1. cat a1.file | sed -n '/[0-9]\+ /s/\(^.*\)0\.0\+/\1/gp' | paste - a2.file
复制代码

小小改动。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-12-13 11:02:08 | 显示全部楼层
谢谢两位的热心帮助,佩服兼羡慕!
希望我能早日摸到linux的大门:p
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表