Ошибка при создании каталога SED

Я пытаюсь использовать SED для создания серии каталогов, содержащих файл с одинаковым именем, но каждый файл в каждом каталоге отличается на одну строку.

for i in $( cat ~/SCRIPTS/AALIST.txt);  do

mkdir ~/jan10/25

sed -e "s/HAT/${i}/"  <~/SCRIPTS/HAT25.inp > ~/jan10/25/25$i/mat.inp

AALIST.txt — это просто файл, фактически содержащий...

A
B
C
D
E

В то время как HAT25.inp имеет много строк текста, а затем слово «HAT» в 25-й строке, этот HAT следует заменить на A, B, C и т. д. В каталоге 25 SED должен создавать каталоги с именами 25A, 25B, 25C и т. д. Внутри этих каталогов должен быть исходный файл HAT25.inp с заменой HAT на букву родительского каталога. Под этим я подразумеваю, что каталог 25A должен содержать HAT.inp, переименованный в mat.inp и содержащий A в 25-й строке, а не HAT. К сожалению, когда я пытаюсь выполнить свой код выше, я получаю сообщение об ошибке:

cannot create directory `/home/user/jan10/25': File exists
./loop.sh: line 23: /home/user/jan10/25/25$i/mat.inp: No such file or directory

Есть ли какое-то представление о том, что я сделал неправильно, у меня возникли проблемы с определением того, какую именно ошибку я сделал.

РЕДАКТИРОВАТЬ:

Закомментировав строку mkdir, я получаю следующую ошибку. Каталог "25" создается, а каталоги 25А, 25В и т.д. не создаются. Полученная ошибка приведена ниже.

./loop.sh: line 23: /home/user/jan10/25/25A/mat.inp: No such file or directory

person George    schedule 06.11.2014    source источник
comment
вы понимаете, что ваш mkdir находится внутри вашего цикла и выполняется во время каждого цикла, следовательно, cannot create dir .... ? Может быть, вы действительно хотите mkdir ~/jan10/25/$i ? Ошибка 25/25$i немного загадочна. Учитывая ваш код, я бы этого не ожидал. Является ли реальный код, который выполняется? Удачи.   -  person shellter    schedule 06.11.2014
comment
Вы правы, mkdir определенно не должен быть в цикле, но проблема сохраняется, даже если он закомментирован. Каталог 25 создается, но ни один из подкаталогов (25А, 25В и т. д.) не создается. Ошибка, которую я сейчас получаю, была отредактирована выше!   -  person George    schedule 06.11.2014
comment
Я действительно думаю, что основной источник вашей проблемы в том, что вы хотите mkdir ~/jan10/25/$i, верно? Использование этого, вероятно, исправит другие ошибки.   -  person shellter    schedule 06.11.2014
comment
Ах как глупо с моей стороны, да ты прав Шелтер! Отправьте ответ, это было совершенно правильно.   -  person George    schedule 06.11.2014


Ответы (1)


for i in $( cat ~/SCRIPTS/AALIST.txt )
 do

   NewFolder=~/jan10/25/25${i}
   mkdir "${NewFolder}"

   sed -e "s/HAT/${i}/" ~/SCRIPTS/HAT25.inp > "${NewFolder}/mat.inp"

done
  • В вашем коде отсутствовала некоторая информация (конец цикла, конечное имя папки при создании и, возможно, некоторое пространство в $()
  • некоторая усовершенствованная сеть (sed не нуждается в < и может напрямую принимать файл в качестве параметра (избегая подоболочки), использование окружения {} для переменной
person NeronLeVelu    schedule 06.11.2014
comment
Спасибо, я попробую! - person George; 06.11.2014
comment
@George: Это даже лучше, поэтому, пожалуйста, примите это. Всем удачи. - person shellter; 06.11.2014
comment
Это работает хорошо, но перед кодом я добавил простую команду, чтобы фактически создать пронумерованный каталог, без mkdir ~/jan10/25 он не будет работать, если каталог уже не существует. Ура, этот код отлично сработал! - person George; 06.11.2014