Bash: синтаксическая ошибка рядом с неожиданным токеном '('
Я новичок в Linux. Следуя некоторому руководству, я использовал следующую команду, которая разбила мой tin.mol2 на 1000 файлов с именем tmp.
cat zinc.mol2 | csplit -ftmp -n4 -ks - '%^@.TRIPOS.MOLECULE%' '/^@.TRIPOS.MOLECULE/' '{*}'
Теперь я должен использовать следующий скрипт согласно учебнику. Когда я использую первую часть foreach f (tmp*)
, Я получил bash: syntax error near unexpected token '('
,
Кто-нибудь может мне помочь, как успешно запустить следующий скрипт?
# Rename the tmp file according to ZINC identifier
# Here the outline of how we do this:
# 1. extract ZINCn8 from the tmpNNNN file and set to variable
# 2. if the Zn8.mol2 file does not exist, the rename the tmpNNNN file
foreach f (tmp*)
echo $f
set zid = `grep ZINC $f`
if !(-e "$zid".mol2) then
set filename = "$zid".mol2
else foreach n (`seq -w 1 99`)
if !(-e "$zid"_"$n".mol2) then
set filename = "$zid"_"$n".mol2
break
endif
end
endif
mv -v $f $filename
end
1 ответ
Код, который вы пытаетесь запустить, похоже, находится в синтаксисе C-оболочки, а не в семействе оболочек Bourne.
Вы можете установить и использовать C-shell - например, tcsh
пакет
sudo apt-get install tcsh
csh
или преобразовать код в его bash
эквивалентно: следующее не проверено, так как у меня нет доступа к вашему входному файлу, но он должен быть закрыт
for f in tmp*; do
echo "$f"
zid="$(grep ZINC "$f")"
if [ -e "${zid}.mol2" ]; then
filename="${zid}.mol2"
else
for n in {01..99}; do
if [ -e "${zid}_${n}.mol2" ]; then
filename="${zid}_${n}.mol2"
break;
fi
done
fi
mv -v "$f" "$filename"
done