Я пытаюсь запустить скрипт с использованием sed i, работающего следующим образом
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: `,'
Пожалуйста, я благодарен за любую помощь в этом вопросе. ..
Спасибо, Пабло.
Оба ваших 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
unknown command ','
означает, что либо $awk1
, либо $awk3
пусто. Вместо номера строки первое, что видит sed - это запятая.
Вам нужно что-то сделать, если «run.adf» не не содержит / type = fde / или / ATOMS /
Я настоятельно рекомендую использовать лучшие имена переменных: «awk1» делает не сообщайте читателю, что он содержит номер строки.
Ваше цитирование может быть более читабельным: sed -n "${awk1},${awk2}p"