我正在尝试使用 sed 运行脚本,如下所示
for et in 1 # 2 3
do
if [ -d ET$et ]; then rm -rf ET$et; fi
mkdir ET$et
cd ET$et
cp $home/step_$i/FDE/diabatA/run.adf .
cp $home/step_$i/FDE/diabatA/mas$i.xyz .
awk1=`awk '/type=fde/{print NR }' run.adf | head -1`
awk2=`$(echo "$a+379" | bc -l )`
sed -n "$awk1,"$awk2"p" run.adf > first
awk3=`awk '/ATOMS/{print NR +1}' first`
awk4=`cat mas$i.xyz | wc -l`
awk4=$( echo "$awk4-1" | bc -l )
awk5=`awk "/ATOMS/{print NR +"${awk4}" }" run.adf`
sed -n "$awk3,"$awk4"p" first > atoms
par=$( echo "$awk4-99" | bc -l )
rho1=$(cat atoms | head -34 )
rho2=$(cat atoms | head -64 | tail -31)
rho3=$(cat atoms | head -97 | tail -33)
rhoall=$(cat atoms | tail -${par} )
echo -e "$rho1\n$rho2\n$rhoall" > eje
done
但告诉我这个:
(standard_in) 1: syntax error
sed: -e expression #1, char 6: unexpected `,'
sed: -e expression #1, char 1: unknown command: `,'
请对我针对这个问题提供的任何帮助表示感谢...
谢谢 Pablo
答案1
你们两个的sed
表情看起来都是畸形的……这是第一个:
sed -n "$awk1,"$awk2"p" run.adf > first
我建议您实际上正在寻找:
sed -n "s/$awk1/$awk2/p" run.adf > first
并对第二个进行类似修改。
sed -n "s/$awk3/$awk4/p" first > atoms
答案2
表示unknown command ','
或$awk1
为$awk3
空。sed 首先看到的不是行号,而是逗号。
如果“run.adf”出现以下情况,你需要采取一些措施不是包含 /type=fde/ 或 /ATOMS/
我强烈建议使用更好的变量名:“awk1”不会向读者传达它包含行号。
您的引用可能更具可读性:sed -n "${awk1},${awk2}p"