Как перенаправить вывод в другой каталог в BASH? - PullRequest
1 голос
/ 03 декабря 2010

У меня есть 3 каталога с именами: / home / user / control4, / home / user / control8, / home / user / control16

Я написал файл сценария, который имеет два цикла, первый запускает симуляцию, производит 3 файла с именем cc1.txt cc2.txt и cc3.txt, а второй цикл предназначен для имен каталогов

Мне нравится направлять cc1.txt, cc2.txt, cc3.txt в / home / user / control4, / home / user / control8, / home / user / control16 соответственно. Какой точный синтаксис для этого в BASH?

Спасибо за вашу помощь.

Мой файл скрипта выглядит так

#!/user/bin/bash
for j in $(4 8 16 ) # loop for directories
do
for i in $(seq 1 3) # loop for simulations  
do
.... produce cc1.txt cc2.txt cc3.txt 
done

Как вывести три файла в соответствующие каталоги? что-то вроде /home/user/control$j/cc$i.txt?

сделано

Ответы [ 3 ]

1 голос
/ 03 декабря 2010
for j in /home/user/control{4,8,16}
do
    for i in cc{1,2,3}.txt
    do
        produce "$j/$i"
    done
done

Это даст девять файлов.Если вы хотите, чтобы по одному файлу в каталоге было всего три файла, некоторые математические вычисления могут помочь.

for i in {1..3}
do
    produce "/home/user/control$((2*2**i))/cc$i.txt"
done
1 голос
/ 03 декабря 2010
cat cc$i.txt > /home/user/control$j/cc$i.txt
0 голосов
/ 03 декабря 2010

Если я правильно читаю ваш сценарий, вы получите 9 файлов: cc1 - 3 каждый в каталогах control4, 8 и 16. Однако из вашего текстового описания следует, что вам нужно всего 3 файла: control4 /cc1.txt, control8 / cc2.txt и control16 / cc3.txt.

Если у вас буквально есть команда с именем produce, которая принимает выходные файлы в качестве параметров, и вам нужно всего 3 файла, я бы просто указал три выходных каталога и файла вручную, и не беспокоиться о цикле.

Если у вас буквально есть команда с именем produce, которая принимает выходные файлы в качестве параметров, и вам нужно всего 9 файлов, то да, управляющий $ j / cc $ i.txt сделает это.

Если у вас нет команды с именем produce, которая принимает выходные файлы в качестве параметров (т. Е. Эта строка в вашем примере кода была псевдо-кодом), а команда, которая создает данные, просто выводит эти файлы без указания чего-либо, тогда я думаю, вам придется mv cc1.txt control4 ; mv cc2.txt control8 ; mv cc3.txt control16 после того, как это будет сделано.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...