Использование переменных из текстового файла в Scripting

Я хотел бы использовать программу командной строки (в частности, geotifcp), которая принимает file_a.tif и file_a.tfw и выводит файл_b.tif. В основном он объединяет два файла с одинаковым именем с разными расширениями файлов и выдает новый файл. Я хотел бы выяснить, как выкупить несколько тысяч из этих вещей. Я создал списки всех этих файлов, используя основные команды ls > output. Я не обязательно ищу ответ, нацеленный на эту программу, но больше на сценарии вообще. Я тоже не ищу, чтобы ты написал это для меня, просто дай мне толчок в общем направлении.

Спасибо за любую помощь!

1
задан 6 May 2011 в 03:05

27 ответов

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

sed -e 's/\(.*\)_.*/geotifcp \1_a.tif \1_a.tfw \1_b.tif/' < list-file.txt

, чтобы узнать, генерирует ли он команды, которые вы после этого, тогда

sed -e 's/\(.*\)_.*/geotifcp \1_a.tif \1_a.tfw \1_b.tif/' < list-file.txt | sh
[d2 ], чтобы запустить их все.

Входная строка asdfasdfsadf_a.tif приводит к geotifcp asdfasdfsadf_a.tif asdfasdfsadf_a.tfw asdfasdfsadf_b.tif, считая, что входные имена файлов [filename]_a.tif и [filename]_a.tiw и имя выхода [filename]_b.tif. [!d3 ]

1
ответ дан 25 May 2018 в 21:25

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

sed -e 's/\(.*\)_.*/geotifcp \1_a.tif \1_a.tfw \1_b.tif/' < list-file.txt

, чтобы узнать, генерирует ли он команды, которые вы после этого, тогда

sed -e 's/\(.*\)_.*/geotifcp \1_a.tif \1_a.tfw \1_b.tif/' < list-file.txt | sh

, чтобы запустить их все.

Входная строка asdfasdfsadf_a.tif приводит к geotifcp asdfasdfsadf_a.tif asdfasdfsadf_a.tfw asdfasdfsadf_b.tif, считая, что входные имена файлов [filename]_a.tif и [filename]_a.tiw и имя выхода [filename]_b.tif.

1
ответ дан 25 July 2018 в 22:00

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

sed -e 's/\(.*\)_.*/geotifcp \1_a.tif \1_a.tfw \1_b.tif/' < list-file.txt

, чтобы узнать, генерирует ли он команды, которые вы после этого, тогда

sed -e 's/\(.*\)_.*/geotifcp \1_a.tif \1_a.tfw \1_b.tif/' < list-file.txt | sh

, чтобы запустить их все.

Входная строка asdfasdfsadf_a.tif приводит к geotifcp asdfasdfsadf_a.tif asdfasdfsadf_a.tfw asdfasdfsadf_b.tif, считая, что входные имена файлов [filename]_a.tif и [filename]_a.tiw и имя выхода [filename]_b.tif.

1
ответ дан 26 July 2018 в 18:21

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

sed -e 's/\(.*\)_.*/geotifcp \1_a.tif \1_a.tfw \1_b.tif/' < list-file.txt

, чтобы узнать, генерирует ли он команды, которые вы после этого, тогда

sed -e 's/\(.*\)_.*/geotifcp \1_a.tif \1_a.tfw \1_b.tif/' < list-file.txt | sh

, чтобы запустить их все.

Входная строка asdfasdfsadf_a.tif приводит к geotifcp asdfasdfsadf_a.tif asdfasdfsadf_a.tfw asdfasdfsadf_b.tif, считая, что входные имена файлов [filename]_a.tif и [filename]_a.tiw и имя выхода [filename]_b.tif.

1
ответ дан 2 August 2018 в 03:33

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

sed -e 's/\(.*\)_.*/geotifcp \1_a.tif \1_a.tfw \1_b.tif/' < list-file.txt

, чтобы узнать, генерирует ли он команды, которые вы после этого, тогда

sed -e 's/\(.*\)_.*/geotifcp \1_a.tif \1_a.tfw \1_b.tif/' < list-file.txt | sh

, чтобы запустить их все.

Входная строка asdfasdfsadf_a.tif приводит к geotifcp asdfasdfsadf_a.tif asdfasdfsadf_a.tfw asdfasdfsadf_b.tif, считая, что входные имена файлов [filename]_a.tif и [filename]_a.tiw и имя выхода [filename]_b.tif.

1
ответ дан 4 August 2018 в 19:32

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

  sed -e 's /\(.*\)_.*/ geotifcp \ 1_a.tif \  1_a.tfw \ 1_b.tif / '& lt;  list-file.txt  

, чтобы узнать, генерирует ли он команды, затем

  sed -e 's / \ (. * \  ) _. * / geotifcp \ 1_a.tif \ 1_a.tfw \ 1_b.tif / '& lt;  list-file.txt |  sh  

, чтобы запустить их все.

Входная строка asdfasdfsadf_a.tif приводит к geotifcp asdfasdfsadf_a.tif asdfasdfsadf_a.tfw asdfasdfsadf_b.tif , считая, что входные имена файлов [имя_файла] _a.tif и [имя_файла] _a.tiw и имя выхода [имя_файла ] _b.tif .

1
ответ дан 6 August 2018 в 03:40

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

  sed -e 's /\(.*\)_.*/ geotifcp \ 1_a.tif \  1_a.tfw \ 1_b.tif / '& lt;  list-file.txt  

, чтобы узнать, генерирует ли он команды, затем

  sed -e 's / \ (. * \  ) _. * / geotifcp \ 1_a.tif \ 1_a.tfw \ 1_b.tif / '& lt;  list-file.txt |  sh  

, чтобы запустить их все.

Входная строка asdfasdfsadf_a.tif приводит к geotifcp asdfasdfsadf_a.tif asdfasdfsadf_a.tfw asdfasdfsadf_b.tif , считая, что входные имена файлов [имя_файла] _a.tif и [имя_файла] _a.tiw и имя выхода [имя_файла ] _b.tif .

1
ответ дан 7 August 2018 в 21:33

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

  sed -e 's /\(.*\)_.*/ geotifcp \ 1_a.tif \  1_a.tfw \ 1_b.tif / '& lt;  list-file.txt  

, чтобы узнать, генерирует ли он команды, затем

  sed -e 's / \ (. * \  ) _. * / geotifcp \ 1_a.tif \ 1_a.tfw \ 1_b.tif / '& lt;  list-file.txt |  sh  

, чтобы запустить их все.

Входная строка asdfasdfsadf_a.tif приводит к geotifcp asdfasdfsadf_a.tif asdfasdfsadf_a.tfw asdfasdfsadf_b.tif , считая, что входные имена файлов [имя_файла] _a.tif и [имя_файла] _a.tiw и имя выхода [имя_файла ] _b.tif .

1
ответ дан 10 August 2018 в 09:49

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

  sed -e 's /\(.*\)_.*/ geotifcp \ 1_a.tif \  1_a.tfw \ 1_b.tif / '& lt;  list-file.txt  

, чтобы узнать, генерирует ли он команды, затем

  sed -e 's / \ (. * \  ) _. * / geotifcp \ 1_a.tif \ 1_a.tfw \ 1_b.tif / '& lt;  list-file.txt |  sh  

, чтобы запустить их все.

Входная строка asdfasdfsadf_a.tif приводит к geotifcp asdfasdfsadf_a.tif asdfasdfsadf_a.tfw asdfasdfsadf_b.tif , считая, что входные имена файлов [имя_файла] _a.tif и [имя_файла] _a.tiw и имя выхода [имя_файла ] _b.tif .

1
ответ дан 13 August 2018 в 16:04

Аргументы командной строки

Вероятно, что использовать аргументы командной строки.

Попробуйте этот скрипт bash:

#!/bin/bash

echo "First argument is $1"
echo "Second argument is $2"

Если имя файла сценария test1.sh, вы получите следующее:

a@u1104:~$ chmod +x test1.sh 
a@u1104:~$ ./test1.sh 
First argument is 
Second argument is 
a@u1104:~$ ./test1.sh file1.tif file2.tiw
First argument is file1.tif
Second argument is file2.tiw

Чтение строк из файлов

Другим компонентом будет просмотр вашего файла. Вы можете сделать это следующим образом:

cat test |while read line; do 
  echo "${line}"
done

Вместо echo "${line}" вы можете, например, сделать ./test1.sh ${line}.tif ${line}.tiw

1
ответ дан 25 May 2018 в 21:25

Я предлагаю вам взглянуть на

sed # to manipulate text output from, for instance, ls

и

xargs # to use some std input to generate (many) new command lines

в сочетании с конвейером вывода одной команды на вход следующего (например, из ls to sed to xargs)

Чтобы, скажем, у вас есть каталог с * tif и * tfw файлом. Вы хотите что-то сделать с файлами tif, используя соответствующий файл tfw. Предположим также, что для каждого файла tif существует tfw-файл с тем же именем

# list all those tif files in one long column
ls -1 *.tif 

# chop of the end .*tif leaving you with the base name
ls *.tif | sed -s 's/\.tif$//'

# feed the previous into xargs to tag a tif with the info in a tfw and
# create new geo_*.tif file
ls *.tif | sed -s 's/\.tif$//' | xargs -i -t geotifcp -e {}.tfw {}.tif geo_{}.tif

. Последняя строка может в значительной степени сделать то, что вам нужно, в одной длинной (трудно читаемой) командной строке без скриптов. [ ! d4]

Чтобы помочь понять, вы также можете сначала создать список файлов, как и вы:

ls *tif> output.list

Затем очистите его с помощью sed, чтобы убедиться, что он хорошо себя ведет.

sed -s 's/\.tif$//' output.list > clean_output.list

end, затем используйте xargs с опцией -p вместо -t, чтобы получить приглашение до выдачи каждой команды:

cat clean_output.list | xargs -i -p geotifcp -e {}.tfw {}.tif geo_{}.tif

EDIT: Вариант первого заключается в том, чтобы использовать больше sed less xargs. Это также немного более «отлаживается».

По существу, вы можете полностью генерировать текст вашей желаемой команды с помощью sed

sed -s 's/\(.*\)\.tif$/geotifcp -e \1.tfw \1.tif geo_\1.tif/'  output.list > process.sh
[d11 ] Я знаю, регулярное выражение выглядит ужасно, но вот грубое объяснение содержания в одинарных кавычках: 's / A / B /' заменяет A с BA в нашем случае (что-то) .tif (обратите внимание, что нам нужно избежать скобки). Что-то хранится в \ 1 и используется для сборки команды geotifcp (что является B).

1
ответ дан 25 May 2018 в 21:25
  • 1
    Отлично! Спасибо за все потраченное время. – Paul 6 May 2011 в 07:38

Аргументы командной строки

Вероятно, что использовать аргументы командной строки.

Попробуйте этот скрипт bash:

#!/bin/bash echo "First argument is $1" echo "Second argument is $2"

Если имя файла сценария test1.sh, вы получите следующее:

a@u1104:~$ chmod +x test1.sh a@u1104:~$ ./test1.sh First argument is Second argument is a@u1104:~$ ./test1.sh file1.tif file2.tiw First argument is file1.tif Second argument is file2.tiw

Чтение строк из файлов

Другим компонентом будет просмотр вашего файла. Вы можете сделать это следующим образом:

cat test |while read line; do echo "${line}" done

Вместо echo "${line}" вы можете, например, сделать ./test1.sh ${line}.tif ${line}.tiw

1
ответ дан 25 July 2018 в 22:00

Я предлагаю вам взглянуть на

sed # to manipulate text output from, for instance, ls

и

xargs # to use some std input to generate (many) new command lines

в сочетании с конвейером вывода одной команды на вход следующего (например, из ls to sed to xargs)

Чтобы, скажем, у вас есть каталог с * tif и * tfw файлом. Вы хотите что-то сделать с файлами tif, используя соответствующий файл tfw. Предположим также, что для каждого файла tif существует tfw-файл с тем же именем

# list all those tif files in one long column ls -1 *.tif # chop of the end .*tif leaving you with the base name ls *.tif | sed -s 's/\.tif$//' # feed the previous into xargs to tag a tif with the info in a tfw and # create new geo_*.tif file ls *.tif | sed -s 's/\.tif$//' | xargs -i -t geotifcp -e {}.tfw {}.tif geo_{}.tif

. Последняя строка может в значительной степени сделать то, что вам нужно, в одной длинной (трудно читаемой) командной строке без скриптов. [ ! d4]

Чтобы помочь понять, вы также можете сначала создать список файлов, как и вы:

ls *tif> output.list

Затем очистите его с помощью sed, чтобы убедиться, что он хорошо себя ведет.

sed -s 's/\.tif$//' output.list > clean_output.list

end, затем используйте xargs с опцией -p вместо -t, чтобы получить приглашение до выдачи каждой команды:

cat clean_output.list | xargs -i -p geotifcp -e {}.tfw {}.tif geo_{}.tif

EDIT: Вариант первого заключается в том, чтобы использовать больше sed less xargs. Это также немного более «отлаживается».

По существу, вы можете полностью генерировать текст вашей желаемой команды с помощью sed

sed -s 's/\(.*\)\.tif$/geotifcp -e \1.tfw \1.tif geo_\1.tif/' output.list > process.sh

Я знаю, регулярное выражение выглядит ужасно, но вот грубое объяснение содержания в одинарных кавычках: 's / A / B /' заменяет A с BA в нашем случае (что-то) .tif (обратите внимание, что нам нужно избежать скобки). Что-то хранится в \ 1 и используется для сборки команды geotifcp (что является B).

1
ответ дан 25 July 2018 в 22:00
  • 1
    Отлично! Спасибо за все потраченное время. – Paul 6 May 2011 в 07:38

Аргументы командной строки

Вероятно, что использовать аргументы командной строки.

Попробуйте этот скрипт bash:

#!/bin/bash echo "First argument is $1" echo "Second argument is $2"

Если имя файла сценария test1.sh, вы получите следующее:

a@u1104:~$ chmod +x test1.sh a@u1104:~$ ./test1.sh First argument is Second argument is a@u1104:~$ ./test1.sh file1.tif file2.tiw First argument is file1.tif Second argument is file2.tiw

Чтение строк из файлов

Другим компонентом будет просмотр вашего файла. Вы можете сделать это следующим образом:

cat test |while read line; do echo "${line}" done

Вместо echo "${line}" вы можете, например, сделать ./test1.sh ${line}.tif ${line}.tiw

1
ответ дан 26 July 2018 в 18:21

Я предлагаю вам взглянуть на

sed # to manipulate text output from, for instance, ls

и

xargs # to use some std input to generate (many) new command lines

в сочетании с конвейером вывода одной команды на вход следующего (например, из ls to sed to xargs)

Чтобы, скажем, у вас есть каталог с * tif и * tfw файлом. Вы хотите что-то сделать с файлами tif, используя соответствующий файл tfw. Предположим также, что для каждого файла tif существует tfw-файл с тем же именем

# list all those tif files in one long column ls -1 *.tif # chop of the end .*tif leaving you with the base name ls *.tif | sed -s 's/\.tif$//' # feed the previous into xargs to tag a tif with the info in a tfw and # create new geo_*.tif file ls *.tif | sed -s 's/\.tif$//' | xargs -i -t geotifcp -e {}.tfw {}.tif geo_{}.tif

. Последняя строка может в значительной степени сделать то, что вам нужно, в одной длинной (трудно читаемой) командной строке без скриптов. [ ! d4]

Чтобы помочь понять, вы также можете сначала создать список файлов, как и вы:

ls *tif> output.list

Затем очистите его с помощью sed, чтобы убедиться, что он хорошо себя ведет.

sed -s 's/\.tif$//' output.list > clean_output.list

end, затем используйте xargs с опцией -p вместо -t, чтобы получить приглашение до выдачи каждой команды:

cat clean_output.list | xargs -i -p geotifcp -e {}.tfw {}.tif geo_{}.tif

EDIT: Вариант первого заключается в том, чтобы использовать больше sed less xargs. Это также немного более «отлаживается».

По существу, вы можете полностью генерировать текст вашей желаемой команды с помощью sed

sed -s 's/\(.*\)\.tif$/geotifcp -e \1.tfw \1.tif geo_\1.tif/' output.list > process.sh

Я знаю, регулярное выражение выглядит ужасно, но вот грубое объяснение содержания в одинарных кавычках: 's / A / B /' заменяет A с BA в нашем случае (что-то) .tif (обратите внимание, что нам нужно избежать скобки). Что-то хранится в \ 1 и используется для сборки команды geotifcp (что является B).

1
ответ дан 26 July 2018 в 18:21
  • 1
    Отлично! Спасибо за все потраченное время. – Paul 6 May 2011 в 07:38

Аргументы командной строки

Вероятно, что использовать аргументы командной строки.

Попробуйте этот скрипт bash:

#!/bin/bash echo "First argument is $1" echo "Second argument is $2"

Если имя файла сценария test1.sh, вы получите следующее:

a@u1104:~$ chmod +x test1.sh a@u1104:~$ ./test1.sh First argument is Second argument is a@u1104:~$ ./test1.sh file1.tif file2.tiw First argument is file1.tif Second argument is file2.tiw

Чтение строк из файлов

Другим компонентом будет просмотр вашего файла. Вы можете сделать это следующим образом:

cat test |while read line; do echo "${line}" done

Вместо echo "${line}" вы можете, например, сделать ./test1.sh ${line}.tif ${line}.tiw

1
ответ дан 2 August 2018 в 03:33

Я предлагаю вам взглянуть на

sed # to manipulate text output from, for instance, ls

и

xargs # to use some std input to generate (many) new command lines

в сочетании с конвейером вывода одной команды на вход следующего (например, из ls to sed to xargs)

Чтобы, скажем, у вас есть каталог с * tif и * tfw файлом. Вы хотите что-то сделать с файлами tif, используя соответствующий файл tfw. Предположим также, что для каждого файла tif существует tfw-файл с тем же именем

# list all those tif files in one long column ls -1 *.tif # chop of the end .*tif leaving you with the base name ls *.tif | sed -s 's/\.tif$//' # feed the previous into xargs to tag a tif with the info in a tfw and # create new geo_*.tif file ls *.tif | sed -s 's/\.tif$//' | xargs -i -t geotifcp -e {}.tfw {}.tif geo_{}.tif

. Последняя строка может в значительной степени сделать то, что вам нужно, в одной длинной (трудно читаемой) командной строке без скриптов. [ ! d4]

Чтобы помочь понять, вы также можете сначала создать список файлов, как и вы:

ls *tif> output.list

Затем очистите его с помощью sed, чтобы убедиться, что он хорошо себя ведет.

sed -s 's/\.tif$//' output.list > clean_output.list

end, затем используйте xargs с опцией -p вместо -t, чтобы получить приглашение до выдачи каждой команды:

cat clean_output.list | xargs -i -p geotifcp -e {}.tfw {}.tif geo_{}.tif

EDIT: Вариант первого заключается в том, чтобы использовать больше sed less xargs. Это также немного более «отлаживается».

По существу, вы можете полностью генерировать текст вашей желаемой команды с помощью sed

sed -s 's/\(.*\)\.tif$/geotifcp -e \1.tfw \1.tif geo_\1.tif/' output.list > process.sh

Я знаю, регулярное выражение выглядит ужасно, но вот грубое объяснение содержания в одинарных кавычках: 's / A / B /' заменяет A с BA в нашем случае (что-то) .tif (обратите внимание, что нам нужно избежать скобки). Что-то хранится в \ 1 и используется для сборки команды geotifcp (что является B).

1
ответ дан 2 August 2018 в 03:33
  • 1
    Отлично! Спасибо за все потраченное время. – Paul 6 May 2011 в 07:38

Аргументы командной строки

Вероятно, что использовать аргументы командной строки.

Попробуйте этот скрипт bash:

#!/bin/bash echo "First argument is $1" echo "Second argument is $2"

Если имя файла сценария test1.sh, вы получите следующее:

a@u1104:~$ chmod +x test1.sh a@u1104:~$ ./test1.sh First argument is Second argument is a@u1104:~$ ./test1.sh file1.tif file2.tiw First argument is file1.tif Second argument is file2.tiw

Чтение строк из файлов

Другим компонентом будет просмотр вашего файла. Вы можете сделать это следующим образом:

cat test |while read line; do echo "${line}" done

Вместо echo "${line}" вы можете, например, сделать ./test1.sh ${line}.tif ${line}.tiw

1
ответ дан 4 August 2018 в 19:32

Я предлагаю вам взглянуть на

sed # to manipulate text output from, for instance, ls

и

xargs # to use some std input to generate (many) new command lines

в сочетании с конвейером вывода одной команды на вход следующего (например, из ls to sed to xargs)

Чтобы, скажем, у вас есть каталог с * tif и * tfw файлом. Вы хотите что-то сделать с файлами tif, используя соответствующий файл tfw. Предположим также, что для каждого файла tif существует tfw-файл с тем же именем

# list all those tif files in one long column ls -1 *.tif # chop of the end .*tif leaving you with the base name ls *.tif | sed -s 's/\.tif$//' # feed the previous into xargs to tag a tif with the info in a tfw and # create new geo_*.tif file ls *.tif | sed -s 's/\.tif$//' | xargs -i -t geotifcp -e {}.tfw {}.tif geo_{}.tif

. Последняя строка может в значительной степени сделать то, что вам нужно, в одной длинной (трудно читаемой) командной строке без скриптов. [ ! d4]

Чтобы помочь понять, вы также можете сначала создать список файлов, как и вы:

ls *tif> output.list

Затем очистите его с помощью sed, чтобы убедиться, что он хорошо себя ведет.

sed -s 's/\.tif$//' output.list > clean_output.list

end, затем используйте xargs с опцией -p вместо -t, чтобы получить приглашение до выдачи каждой команды:

cat clean_output.list | xargs -i -p geotifcp -e {}.tfw {}.tif geo_{}.tif

EDIT: Вариант первого заключается в том, чтобы использовать больше sed less xargs. Это также немного более «отлаживается».

По существу, вы можете полностью генерировать текст вашей желаемой команды с помощью sed

sed -s 's/\(.*\)\.tif$/geotifcp -e \1.tfw \1.tif geo_\1.tif/' output.list > process.sh

Я знаю, регулярное выражение выглядит ужасно, но вот грубое объяснение содержания в одинарных кавычках: 's / A / B /' заменяет A с BA в нашем случае (что-то) .tif (обратите внимание, что нам нужно избежать скобки). Что-то хранится в \ 1 и используется для сборки команды geotifcp (что является B).

1
ответ дан 4 August 2018 в 19:32
  • 1
    Отлично! Спасибо за все потраченное время. – Paul 6 May 2011 в 07:38

Предлагаю вам взглянуть на

  sed #, чтобы манипулировать текстовым выходом, например, ls  

и

  xargs #, чтобы использовать некоторый вход std для генерации (многих) новых команд  

в сочетании с конвейером вывода одной команды на вход следующего (например, от ls до sed to xargs)

Чтобы, скажем, у вас есть каталог с * tif и * tfw файлом. Вы хотите что-то сделать с файлами tif, используя соответствующий файл tfw. Предположим также, что для каждого файла tif существует tfw-файл с тем же именем

  # список всех этих файлов tif в одном длинном столбце ls -1 * .tif # chop of the end. *  tif оставляя вас с базовым именем ls * .tif |  sed -s 's / \. tif $ //' # передать предыдущее в xargs, чтобы пометить tif с информацией в tfw и # create new geo _ *. tif file ls * .tif |  sed -s '/ \. tif $ //' |  xargs -i -t geotifcp -e {} .tfw {} .tif geo _ {}. tif  

Последняя строка может в значительной степени сделать то, что вам нужно за один длинный (трудно читаемый) командной строки без скриптов.

Чтобы помочь понять, вы также можете сначала создать список файлов, как вы это делали:

  ls * tif & gt;  output.list  

Затем очистите его с помощью sed, чтобы убедиться, что он хорошо себя ведет.

  sed -s 's / \. tif $ //'  output.list & gt;  clean_output.list  

end, затем используйте xargs с опцией -p вместо -t, чтобы получить приглашение перед выдачей каждой команды:

  cat clean_output.  список |  xargs -i -p geotifcp -e {} .tfw {} .tif geo _ {}. tif  

EDIT: Вариант первого заключается в том, чтобы использовать больше sed less xargs. Это также немного более «отлаживается».

По существу, вы можете полностью генерировать текст вашей желаемой команды с помощью sed

 .  ] sed -s 's / \ (. * \) \. tif $ / geotifcp -e \ 1.tfw \ 1.tif geo_ \ 1.tif /' output.list & gt;  process.sh  

Я знаю, регулярное выражение выглядит ужасно, но вот грубое объяснение содержания в одинарных кавычках: 's / A / B /' заменяет A с BA в нашем случае (что-то) .tif (обратите внимание, что нам нужно избегать скобок). Что-то хранится в \ 1 и используется для сборки команды geotifcp (которая есть B).

1
ответ дан 6 August 2018 в 03:40

Аргументы командной строки

Возможно, вы используете аргументы командной строки.

Попробуйте этот скрипт bash:

  #! / bin / bash  echo «Первый аргумент равен $ 1» echo «Второй аргумент равен $ 2»  

Если имя файла сценария равно test1.sh , вы получите следующее: [ ! d10]

  a @ u1104: ~ $ chmod + x test1.sh a @ u1104: ~ $ ./test1.sh Первый аргумент - второй аргумент - это @ u1104: ~ $ ./test1.sh file1  .tif file2.tiw Первым аргументом является file1.tif Второй аргумент - file2.tiw  

Чтение строк из файлов

Другим компонентом будет цикл через ваш файл. Вы можете сделать это следующим образом:

  cat test | во время чтения строки;  do echo "$ {line}" done  

Вместо echo "$ {line}" вы можете, например, выполнить ./ test1. sh $ {line} .tif $ {line} .tiw

1
ответ дан 6 August 2018 в 03:40

Я предлагаю вам посмотреть на

  sed #, чтобы манипулировать текстовым выходом, например, ls  

и

  xargs #, чтобы использовать некоторый вход std для генерации (многих) новых команд  

в сочетании с конвейером вывода одной команды на вход следующего (например, от ls до sed to xargs)

Чтобы, скажем, у вас есть каталог с * tif и * tfw файлом. Вы хотите что-то сделать с файлами tif, используя соответствующий файл tfw. Предположим также, что для каждого файла tif существует tfw-файл с тем же именем

  # список всех этих файлов tif в одном длинном столбце ls -1 * .tif # chop of the end. *  tif оставляя вас с базовым именем ls * .tif |  sed -s 's / \. tif $ //' # передать предыдущее в xargs, чтобы пометить tif с информацией в tfw и # create new geo _ *. tif file ls * .tif |  sed -s '/ \. tif $ //' |  xargs -i -t geotifcp -e {} .tfw {} .tif geo _ {}. tif  

Последняя строка может в значительной степени сделать то, что вам нужно за один длинный (трудно читаемый) командной строки без скриптов.

Чтобы помочь понять, вы также можете сначала создать список файлов, как вы это делали:

  ls * tif & gt;  output.list  

Затем очистите его с помощью sed, чтобы убедиться, что он хорошо себя ведет.

  sed -s 's / \. tif $ //'  output.list & gt;  clean_output.list  

end, затем используйте xargs с опцией -p вместо -t, чтобы получить приглашение перед выдачей каждой команды:

  cat clean_output.  список |  xargs -i -p geotifcp -e {} .tfw {} .tif geo _ {}. tif  

EDIT: Вариант первого заключается в том, чтобы использовать больше sed less xargs. Это также немного более «отлаживается».

По существу, вы можете полностью генерировать текст вашей желаемой команды с помощью sed

 .  ] sed -s 's / \ (. * \) \. tif $ / geotifcp -e \ 1.tfw \ 1.tif geo_ \ 1.tif /' output.list & gt;  process.sh  

Я знаю, регулярное выражение выглядит ужасно, но вот грубое объяснение содержания в одинарных кавычках: 's / A / B /' заменяет A с BA в нашем случае (что-то) .tif (обратите внимание, что нам нужно избегать скобок). Что-то хранится в \ 1 и используется для сборки команды geotifcp (которая есть B).

1
ответ дан 7 August 2018 в 21:33

Аргументы командной строки

Возможно, вы используете аргументы командной строки.

Попробуйте этот скрипт bash:

  #! / bin / bash  echo «Первый аргумент равен $ 1» echo «Второй аргумент равен $ 2»  

Если имя файла сценария равно test1.sh , вы получите следующее: [ ! d10]

  a @ u1104: ~ $ chmod + x test1.sh a @ u1104: ~ $ ./test1.sh Первый аргумент - второй аргумент - это @ u1104: ~ $ ./test1.sh file1  .tif file2.tiw Первым аргументом является file1.tif Второй аргумент - file2.tiw  

Чтение строк из файлов

Другим компонентом будет цикл через ваш файл. Вы можете сделать это следующим образом:

  cat test | во время чтения строки;  do echo "$ {line}" done  

Вместо echo "$ {line}" вы можете, например, выполнить ./ test1. sh $ {line} .tif $ {line} .tiw

1
ответ дан 7 August 2018 в 21:33

Я предлагаю вам посмотреть на

  sed #, чтобы манипулировать текстовым выходом, например, ls  

и

  xargs #, чтобы использовать некоторый вход std для генерации (многих) новых команд  

в сочетании с конвейером вывода одной команды на вход следующего (например, от ls до sed to xargs)

Чтобы, скажем, у вас есть каталог с * tif и * tfw файлом. Вы хотите что-то сделать с файлами tif, используя соответствующий файл tfw. Предположим также, что для каждого файла tif существует tfw-файл с тем же именем

  # список всех этих файлов tif в одном длинном столбце ls -1 * .tif # chop of the end. *  tif оставляя вас с базовым именем ls * .tif |  sed -s 's / \. tif $ //' # передать предыдущее в xargs, чтобы пометить tif с информацией в tfw и # create new geo _ *. tif file ls * .tif |  sed -s '/ \. tif $ //' |  xargs -i -t geotifcp -e {} .tfw {} .tif geo _ {}. tif  

Последняя строка может в значительной степени сделать то, что вам нужно за один длинный (трудно читаемый) командной строки без скриптов.

Чтобы помочь понять, вы также можете сначала создать список файлов, как вы это делали:

  ls * tif & gt;  output.list  

Затем очистите его с помощью sed, чтобы убедиться, что он хорошо себя ведет.

  sed -s 's / \. tif $ //'  output.list & gt;  clean_output.list  

end, затем используйте xargs с опцией -p вместо -t, чтобы получить приглашение перед выдачей каждой команды:

  cat clean_output.  список |  xargs -i -p geotifcp -e {} .tfw {} .tif geo _ {}. tif  

EDIT: Вариант первого заключается в том, чтобы использовать больше sed less xargs. Это также немного более «отлаживается».

По существу, вы можете полностью генерировать текст вашей желаемой команды с помощью sed

 .  ] sed -s 's / \ (. * \) \. tif $ / geotifcp -e \ 1.tfw \ 1.tif geo_ \ 1.tif /' output.list & gt;  process.sh  

Я знаю, регулярное выражение выглядит ужасно, но вот грубое объяснение содержания в одинарных кавычках: 's / A / B /' заменяет A с BA в нашем случае (что-то) .tif (обратите внимание, что нам нужно избегать скобок). Что-то хранится в \ 1 и используется для сборки команды geotifcp (которая есть B).

1
ответ дан 10 August 2018 в 09:49

Аргументы командной строки

Возможно, вы используете аргументы командной строки.

Попробуйте этот скрипт bash:

  #! / bin / bash  echo «Первый аргумент равен $ 1» echo «Второй аргумент равен $ 2»  

Если имя файла сценария равно test1.sh , вы получите следующее: [ ! d10]

  a @ u1104: ~ $ chmod + x test1.sh a @ u1104: ~ $ ./test1.sh Первый аргумент - второй аргумент - это @ u1104: ~ $ ./test1.sh file1  .tif file2.tiw Первым аргументом является file1.tif Второй аргумент - file2.tiw  

Чтение строк из файлов

Другим компонентом будет цикл через ваш файл. Вы можете сделать это следующим образом:

  cat test | во время чтения строки;  do echo "$ {line}" done  

Вместо echo "$ {line}" вы можете, например, выполнить ./ test1. sh $ {line} .tif $ {line} .tiw

1
ответ дан 10 August 2018 в 09:49

Предлагаю вам взглянуть на

  sed #, чтобы манипулировать текстовым выходом, например, ls  

и

  xargs #, чтобы использовать некоторый вход std для генерации (многих) новых команд  

в сочетании с конвейером вывода одной команды на вход следующего (например, от ls до sed to xargs)

Чтобы, скажем, у вас есть каталог с * tif и * tfw файлом. Вы хотите что-то сделать с файлами tif, используя соответствующий файл tfw. Предположим также, что для каждого файла tif существует tfw-файл с тем же именем

  # список всех этих файлов tif в одном длинном столбце ls -1 * .tif # chop of the end. *  tif оставляя вас с базовым именем ls * .tif |  sed -s 's / \. tif $ //' # передать предыдущее в xargs, чтобы пометить tif с информацией в tfw и # create new geo _ *. tif file ls * .tif |  sed -s '/ \. tif $ //' |  xargs -i -t geotifcp -e {} .tfw {} .tif geo _ {}. tif  

Последняя строка может в значительной степени сделать то, что вам нужно за один длинный (трудно читаемый) командной строки без скриптов.

Чтобы помочь понять, вы также можете сначала создать список файлов, как вы это делали:

  ls * tif & gt;  output.list  

Затем очистите его с помощью sed, чтобы убедиться, что он хорошо себя ведет.

  sed -s 's / \. tif $ //'  output.list & gt;  clean_output.list  

end, затем используйте xargs с опцией -p вместо -t, чтобы получить приглашение перед выдачей каждой команды:

  cat clean_output.  список |  xargs -i -p geotifcp -e {} .tfw {} .tif geo _ {}. tif  

EDIT: Вариант первого заключается в том, чтобы использовать больше sed less xargs. Это также немного более «отлаживается».

По существу, вы можете полностью генерировать текст вашей желаемой команды с помощью sed

 .  ] sed -s 's / \ (. * \) \. tif $ / geotifcp -e \ 1.tfw \ 1.tif geo_ \ 1.tif /' output.list & gt;  process.sh  

Я знаю, регулярное выражение выглядит ужасно, но вот грубое объяснение содержания в одинарных кавычках: 's / A / B /' заменяет A с BA в нашем случае (что-то) .tif (обратите внимание, что нам нужно избегать скобок). Что-то хранится в \ 1 и используется для сборки команды geotifcp (которая есть B).

1
ответ дан 13 August 2018 в 16:04
  • 1
    Отлично! Спасибо за все потраченное время. – Paul 6 May 2011 в 07:38

Аргументы командной строки

Возможно, вы используете аргументы командной строки.

Попробуйте этот скрипт bash:

  #! / bin / bash  echo «Первый аргумент равен $ 1» echo «Второй аргумент равен $ 2»  

Если имя файла сценария равно test1.sh , вы получите следующее: [ ! d10]

  a @ u1104: ~ $ chmod + x test1.sh a @ u1104: ~ $ ./test1.sh Первый аргумент - второй аргумент - это @ u1104: ~ $ ./test1.sh file1  .tif file2.tiw Первым аргументом является file1.tif Второй аргумент - file2.tiw  

Чтение строк из файлов

Другим компонентом будет цикл через ваш файл. Вы можете сделать это следующим образом:

  cat test | во время чтения строки;  do echo "$ {line}" done  

Вместо echo "$ {line}" вы можете, например, выполнить ./ test1. sh $ {line} .tif $ {line} .tiw

1
ответ дан 13 August 2018 в 16:04

Другие вопросы по тегам:

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