2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Скрипт на bash
Сообщение21.05.2011, 10:11 
Заслуженный участник
Аватара пользователя


11/12/05
10059
Добрый день. Прошу помочь со скриптом. Имеется массив файлов file-1, file-2, ... file-50 в директории dirA. В директории dirB содержится массив поддиректорий с файлами: file-a, file-b, file-c ... file-z. Мне нужно в цикле для каждого file-i (i=1,2...50), и каждого file-X(X=a,b,.. z) отработать перловый скрипт script.pl и сохранить результат в файле с названием file-i_file-X.txt; не знаю синтаксиса чтобы организовать последнее. Вот код:
Код:
#/usr/bin/bash
for FILES in $HOME/Desktop/dirA/*
do
echo $FILESI
if [ -f  $FILESI ]
then
do
   for FOLDERS in $HOME/Desktop/dirB/*
   do
      echo $FOLDERS
      for FILES2 in $FOLDERS/*
      do
              if [ -f  $FILESX ]
              then
         script.pl $FILESI  -p $FILES2 >  {не знаю что здесь}.txt
              fi
      done
   done   
done
fi
done

Благодарю заранее.

 Профиль  
                  
 
 Re: Скрипт на bash
Сообщение21.05.2011, 11:23 
Заслуженный участник
Аватара пользователя


07/01/10
2015
Dan B-Yallay в сообщении #448254 писал(а):
{не знаю что здесь}.txt

Код:
`basename $FILESI`_`basename $FILES2`.txt

(Оффтоп)

Dan B-Yallay в сообщении #448254 писал(а):
for FILES in $HOME/Desktop/dirA/*

FILESI ?

 Профиль  
                  
 
 Re: Скрипт на bash
Сообщение21.05.2011, 16:26 
Заслуженный участник
Аватара пользователя


11/12/05
10059
Спасибо!
Насколько я понимаю, переменные
Код:
$FILES ,  $FILES2
будут включать весь путь к файлу от корня / .
Надо ли с ними заранее что-то делать (укорачивать) или 'basename' сам побеспокоится об этом?

PS
Код:
$FILESI
- неаккуратно набирал на телефоне.

 Профиль  
                  
 
 Re: Скрипт на bash
Сообщение21.05.2011, 17:09 
Заслуженный участник


26/07/09
1559
Алматы
2Dan B-Yallay
Цитата:
будут включать весь путь к файлу от корня

Да вроде нет. Выполните for f in *; do echo $f; done, будет выдаваться просто список файлов из текущей директории, без полных путей.

 Профиль  
                  
 
 Re: Скрипт на bash
Сообщение21.05.2011, 19:42 
Заслуженный участник
Аватара пользователя


07/01/10
2015
Dan B-Yallay в сообщении #448377 писал(а):
будут включать весь путь к файлу от корня / .

Нет. Включается только путь от текущей директории. basename стирает весь путь, оставляя только имя файла, см. man basename.

 Профиль  
                  
 
 Re: Скрипт на bash
Сообщение22.05.2011, 06:51 
Заслуженный участник
Аватара пользователя


11/12/05
10059
Спасибо Всем за советы/информацию. Запустил этот скрипт:

Код:
#/usr/bin/bash

for MOTIFS in $HOME/Desktop/Devia/*
do
echo $MOTIFS
if [ -f MOTIFS ]   #Проверка, является ли файлом
then
   for FOLDERS in $HOME/Desktop/Devia/*
   do
      if [ -d $FOLDERS ] #Проверка, является ли директорией
      then
      do     ####  line 12
      echo $FOLDERS
         for PEAKS in $FOLDERS/*   
         do
                 if [ -f $PEAKS ] #Проверка, является ли файлом
                 then
            echo $PEAKS
            script.pl $PEAKS  -size 1000 -m $MOTIFS >  $FOLDERS/`basename $PEAKS`_`basename $MOTIFS`.txt
                 fi
         done      
      done
      fi
   done   
fi
done

а он ругается:
Код:
dan@squeeze:~$ MyScripts/Annotating.sh
MyScripts/Annotating.sh: line 12: syntax error near unexpected token `do'
MyScripts/Annotating.sh: line 12: `      do   '
dan@squeeze:~$

Чего он хочет?

 Профиль  
                  
 
 Re: Скрипт на bash
Сообщение22.05.2011, 10:31 
Заслуженный участник
Аватара пользователя


07/01/10
2015
После if не надо do. (У вас же уже стоит then.)
Соответствующий done тоже надо убрать. (У вас уже есть fi, который завершает блок.)

-- 22 май 2011, 11:33 --

(Лично я)

Предпочитаю более компактно писать
Код:
for ...; do
  ...
done

if ...; then
  ...
fi

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 7 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group