2013-04-30 4 views
1

Я пытаюсь добавить все dbfs в папку к первому dbf. Dbfs являются частью шейп-файлов ESRI, которые я хочу добавить в один файл. У меня есть рабочий код, но я предполагаю, что я действительно был awkard (я абсолютный новичок bash) ... И когда я опускаю первый файл, мой счетчик подсчитывает один избыточный файл в конце цикла и создает ошибку .. прилагаемой делается ogr2ogr (GDAL/OGR библиотека)Добавление всех dbfs в папку в первый dbf с помощью сценария bash

mydir=C:/Users/Kay/Desktop/Test_GIS/new/ 
cd $mydir 

dbfs=(*.dbf)        # put dir to array 

let i=1          # start with 1 omitting 1st file with index 0 

for f in *.dbf 
    do  
    echo appending file ${dbfs[i]} to ${dbfs[0]} 
    ogr2ogr -append ${dbfs[0]} ${dbfs[i]} 
    let i=i+1         # counter + 1 
done 

ответ

1

Версия A: вы явно указать на то, что DBF хотите добавить

append_to="fff.dbf" 
find . -maxdepth 1 -name \*.dbf -print0 | grep -zv "^$append_to$" | xargs -0 -n1 -I % echo ogr2ogr -append "$append_to" "%" 

Вариант в: добавление к 1-му ДБФ (первый от ls)

append_to=$(ls -1 *.dbf | head -1) 
find . -maxdepth 1 -name \*.dbf -print0 | grep -zv "^$append_to$" | xargs -0 -n1 -I % echo ogr2ogr -append "$append_to" "%" 

Оба теперь находятся в режиме «сухой ход» - только показывает, что будет делать. Удовлетворив, удалите echo из xargs. Вторая строка одинакова для обеих версий.

чистый Баш

IFS=$'\t\n'  #don't need this line when your filenames doesn't contain spaces 
declare -a dbfs=(*.dbf) 
unset $IFS  #don't need this line when your filenames doesn't contain spaces 
append_to=${dbfs[0]} 
unset dbfs[0] 
for dbf in ${dbfs[@]} 
do 
     echo ogr2ogr -append "$append_to" "$dbf" 
done 
+0

Я иду с последним подходом - спасибо и +1. Тем не менее, для тех, кто использует это с ogr2ogr, проверьте дополнительный ответ, который я разместил для записи! – Kay

+0

Вы нашли лучшее решение для себя. Я слышал о «ogr2ogr» в первый раз здесь ... так, спасибо за прием :) – jm666

1

Для записи

Если вы используете ogr2ogr для добавления DBFs формы-файлов, все на самом деле гораздо проще. Если вы передаете имя файла shp, которое не существует, оно создает пустой файл формы «на лету» и добавляет к нему данные. Таким образом, этого будет достаточно:

# working directory with shp-files to be appended into one file 
mydir=D:/GIS_DataBase/CorineLC/shps_extracted 
cd $mydir 

# directory where final shp-file will be saved 
mydir_final=D:/GIS_DataBase/CorineLC/shps_app_and_extr 
mkdir $mydir_final 

# get dbfs, which are the actual files to which append the data to 
declare -a dbfs=(*.dbf) 

# loop through dbfs in dir and append all to the dbf of shp-file 
# extr_and_app.shp that will be created by ogr2ogr on the fly 
# and saved to {mydir_final} 
for dbf in ${dbfs[@]}; do 
    echo appending $dbf to $mydir_final/extr_and_app.dbf 
    ogr2ogr -append $mydir_final/extr_and_app.dbf $dbf 
done 

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

  • Нет связанных вопросов^_^