2013-03-03 2 views
0

Привет, мне было интересно, может ли кто-нибудь помочь в моем кодировании, в теории я знаю, как это сделать вручную, используя основные команды, однако, чтобы сэкономить время и сделать его более эффективным, я бы хотел использовать сценарий .sh, чтобы сделать это вручную, поскольку я мог бы использовать большие объемы данных.Итеративный процесс прошивки через 10 файлов в bash

Итак, идея состоит в том, что у меня есть 10 файлов, которые будут называться file_1.txt через file_10.txt, и я хочу рассматривать file_1 как своего рода «обучающий» файл. Поэтому добавление file_2 к file_1, а затем использовать GZIP, чтобы сжать и сохранить в другом месте, я думаю, это будет выглядеть примерно так ...

cat file_1.txt file_2.txt | gzip -c > newfile.gz 

, но тогда следующий шаг должен сделать то же самое с file_3 к file_1 и молнии, как новый файл, затем файл_4 в файл_1 и т. д. (вы получаете идею).

Как только он пробежал от _2 до _10 с файлом_1, я хотел бы сделать то же самое с файлом_2 и добавить 1, 3, 4, 5, 6, 7, 8 и 10 каждый по отдельности и по zip и т. Д.

Следовательно, в конце у меня должно быть 90 отдельных почтовых файлов. (Включение каждого файла само по себе заархивировано, то есть file_1.gz, file_2.gz и т. Д. В качестве ссылки для сравнения моих присоединенных файлов).

Заранее благодарим за любые советы или помощь.

P.s. не имеет значения, действительно ли какой-либо код действительно эффективен, поэтому, например, разделить на 10 разных петель один за другим, если это ясно, тогда все в порядке. Я только анализирую результаты, а не использую код для каждого. Благодаря!

+0

Вы знаете, как писать циклы в Bash? –

ответ

3

Использование петли:

for i in {1..10} ; do 
    for j in {1..10} ; do 
     if ((i != j)) ; then 
      cat file_$i.txt file_$j.txt | gzip -c > newfile-$i-$j.gz 
     fi 
    done 
done 

Это создает 90 GZIP файлы исключая каждый файл архивированная сам по себе. Создание дополнительных 10 gzips оставлено как упражнение для читателя.

+0

Спасибо! Цените помощь. –

+2

FYI, если количество входных файлов не является фиксированным (т. Е. '$ N' вместо 10), вы можете использовать' $ (seq 1 $ n) 'вместо' {1..10} '. – chepner

Смежные вопросы