замена строки bash в параллельной команде - PullRequest
0 голосов
/ 13 октября 2018

Я параллельно выполняю команду gdalinfo для получения статистики из *.tif файлов

find *tif -printf "%f\n" | parallel -j 5 "/usr/local/bin/gdalinfo -mm -stats -hist -json {} > {}.json"

{} будет заменено обрабатываемым файлом e, g.SRTM.tif, поэтому выходной файл с именем: SRTM.tif.json

Как выполнить подстановку строк в {}?

Используя циклы в Bash, я обычно выполняю ${f%.tif}.json, но он не работает(у нас нет переменной bash), а также попытался awk, но безуспешно.

Ответы [ 2 ]

0 голосов
/ 13 октября 2018

Вы можете найти tif-файлы с чем-то вроде

find . -name "*.tif" -print | cut -d "." -f1 |
   parallel -j 5 "/usr/local/bin/gdalinfo -mm -stats -hist -json {}.tif > {}.json"

Редактировать: Или с предложением в другом расположении:

find . -name "*.tif" -print | 
   parallel -j 5 "/usr/local/bin/gdalinfo -mm -stats -hist -json {.}.tif > {.}.json"
0 голосов
/ 13 октября 2018

In parallel, {.} - строка ввода без расширения.Так что используйте это вместо {}.Если вы действительно хотите выполнять сложные манипуляции со строками, используйте {= perl expression=}.

...