【发布时间】:2014-03-27 17:07:21
【问题描述】:
所以我制作了一个脚本,它从许多不同的文件中收集数据:
#!/bin/bash
mkdir DATAPOOL"$1"
grep achi *out>runner
grep treat *out>>runner
cat runner | grep Primitive *gout | grep '= '|awk '{print $1,$6}' > CellVolume"$1".txt
cat runner | grep ' c ' *gout | grep 'Angstrom '|awk '{print $1,$3}' > Cellc"$1".txt
cat runner | grep 'Final energy ' *gout |awk '{print $1,$5}' > CellEnergy"$1".txt
等等等等
cat runner |awk '{print "~/xtlanal",$1," > ",$1}' >runner2
vi runner2
:1,$s/gout:/xtl/
:1,$s/gout:/dat/
:wq
source runner2
grep Summary *dat | grep 'CAT-O ' |awk '{print $1,$6}' > AVE_NaO_"$1".txt
mv *txt DATAPOOL"$1"
因此,在没有 vi 部分的情况下运行时,我最终得到了所有必需的文本文件,所以我知道这一切都有效。此外,当我使用 vi 命令运行它时,它只是在 vi 命令处停止运行,然后我可以手动输入 3 个命令,最终得到正确的结果。我正在努力解决的是我无法让 vi 自己运行命令,所以我可以在不同的目录中多次执行文件,而不必一次又一次地手动输入命令。
任何帮助将不胜感激。
干杯
【问题讨论】:
-
看起来您正在尝试自动化 vi 的使用。也许如果您告诉我们
1,$s/gout:/xtl/命令的作用,我们可以帮助您以更直接的方式进行操作。 -
使用
sed而不是自动化vi有什么问题?喜欢:sed -i -e 's/gout:/xtl/' runner2? -
是的,除了 vi 之外,还有多种方法可以编辑/删除/创建文件,这些文件可以在您的脚本中使用。你为什么不试试呢?
-
我发现在脚本中运行 VI 的最佳方法是使用
vi runner2 -c ':1,$s/gout:/xtl/ :1,$s/gout:/dat/ :wq'这使 vi 运行命令(只是替换文件的扩展名)。 -c 允许 vim 传递可执行命令。注意撇号是必需的。
标签: bash shell terminal editor vi