1

我尝试将文件夹中的所有 dbf 附加到第一个 dbf。dbfs 是我想附加到一个文件中的 ESRI shapefile 的一部分。我有一个工作代码,但我想我所做的真的很尴尬(我是一个绝对的 bash 新手)......当我省略第一个文件时,我的计数器在循环结束时计算一个过多的文件并产生错误.. 附加由 ogr2ogr (GDAL/OGR Library) 完成

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
4

2 回答 2

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" "%"

变体 B:附加到第一个 dbf(第一个由 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 中删除。两个版本的第二行相同。

纯粹的 bash

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
于 2013-04-30T21:49:30.113 回答
1

作为记录

如果您使用 ogr2ogr 附加形状文件的 dbfs,事情实际上要容易得多。如果您传递一个尚不存在的 shp 文件名,它会即时创建一个空的 shape-file 并将数据附加到其中。所以,这就足够了:

# 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
于 2013-05-01T20:11:44.273 回答