Предоставление общего пути для группы файлов в скрипт Bash

лично я копирую базовое графическое приложение на Java, например это http://beginwithjava.blogspot.ch/2008/07/very- basic-java-graphics-3-examples.html (BasicFrame.java), скомпилируйте и запустите ... конечно, у вас должен быть установлен JDK ...

2
24.06.2018, 15:55
2 ответа

Поскольку вы уже используете раскрытие фигурных скобок, вы также можете использовать его здесь.

Либо расширение генерирует последовательность чисел (.., литеральную):

for i in {1..30}; do
    paste./directory"$i"/table{1..20}.txt >./merged_tables/tables_directory"$i".txt
done 

Или перечислите их вручную (заполните поле...):

for i in {1..30}; do
    paste./directory"$i"/table{1,2,...,20}.txt >./merged_tables/tables_directory"$i".txt
done 

То есть, если вы не просто хотите, чтобы все файлы в каталоге соответствовали шаблону:

for i in {1..30}; do
    paste./directory"$i"/table*.txt >./merged_tables/tables_directory"$i".txt
done 
0
27.01.2020, 22:02
for (( i = 1; i <= 30; ++i )); do
    ( cd "directory$i" &&
      paste tableNC023.txt tableNC088.txt tableNC102.txt... ) >"./merged_tables/tables_directory$i.txt"
done

Это использует cdдля входа в каталог в подоболочке. Если cdуспешно, pasteиспользуется для создания объединенных данных. Вывод из подоболочки перенаправляется в ваш файл результатов, как и раньше.

Поскольку cdвыполняется в подоболочке, не требуется никаких cd.., cd -или cd "$OLDPWD", чтобы "отступить" для следующей итерации.


Альтернатива для более аккуратного кода:

tables=( tableNC023.txt tableNC088.txt tableNC102.txt
         more tables here )

for (( i = 1; i <= 30; ++i )); do
    ( cd "directory$i" &&
      paste "${tables[@]}" ) >"./merged_tables/tables_directory$i.txt"
done

Мое использование for (( i... ))вместо for i in {...}основано исключительно на личных предпочтениях.

3
27.01.2020, 22:02

Теги

Похожие вопросы