我想拆分一个大型文本数据库(约1000万行)。我可以使用像
这样的命令$ sed -i -e '4 s/(dB)//' -e '4 s/Best\ unit/Best_Unit/' -e '1,3 d' '/cygdrive/c/ Radio Mobile/Output/TRC_TestProcess/trc_longlands.txt'
$ split -l 1000000 /cygdrive/P/2012/Job_044_DM_Radio_Propogation/Working/FinalPropogation/TRC_Longlands/trc_longlands.txt 1
第一行是清理数据库,第二行是分割它 - 但是输出文件没有字段名称。如何将字段名称合并到每个数据集中,并管理包含原始文件,新文件名和行号(来自原始文件)的列表。这样可以在arcgis模型中使用它来重新连接最终的简化多边形数据集。
另外还有更多 - 这需要进入arcgis模型,基于python的解决方案是最好的。更多详细信息位于https://gis.stackexchange.com/questions/21420/large-point-to-polygon-by-buffer-join-buffer-dissolve-issues#comment29062_21420和Remove specific lines from a large text file in python
根据icyrock.com的回答,使用基于CYGWIN的Python解决方案
我们有process_text.sh
cd /cygdrive/P/2012/Job_044_DM_Radio_Propogation/Working/FinalPropogation/TRC_Longlands
mkdir processing
cp trc_longlands.txt processing/trc_longlands.txt
cd txt_processing
sed -i -e '4 s/(dB)//' -e '4 s/Best\ unit/Best_Unit/' -e '1,3 d' 'trc_longlands.txt'
split -l 1000000 trc_longlands.txt trc_longlands_
cat > a
h
1
2
3
4
5
6
7
8
9
^D
split -l 3
split -l 3 a 1
mv 1aa 21aa
for i in 1*; do head -n1 21aa|cat - $i > 2$i; done
for i in 21*; do echo ---- $i; cat $i; done
如何“TRC_Longlands”和路径被输入文件名替换-in python我们有%path%/%name。 在最后一行是“做回声”必要吗?
这是由python使用
调用的import os
os.system("process_text.bat")
其中process_text.bat基本上是
bash process_text.sh
从dos运行时出现以下错误...
Microsoft Windows [Version 6.1.7601]版权所有(c)2009 Microsoft 公司。保留所有权利。
C:\用户\ georgec> bash的 病人:\ 2012 \ Job_044_DM_Radio_Propogation \工作\ FinalPropogat ion \ TRC_Longlands \ process_text.sh'bash'未被识别为 内部或外部命令,可操作程序或批处理文件。
当我从cygwin -I get
运行bash命令时georgec @ ATGIS25 / cygdrive / P / 2012 / Job_044_DM_Radio_Propogation /工作/ FinalPropogation / TRC_Longlands $ bash process_text.sh:没有这样的文件或目录: / cygdrive / P / 2012 / Job_044_DM_Radio_Propogation /工作/ FinalPropogation / TRC_Longlands cp:无法创建常规文件`processing / trc_longlands.txt \ r':不 这样的文件或目录:没有这样的文件或目录:txt_processing: 没有这样的文件或directoryds.txt
但文件是在根目录中创建的。
为什么会有“。”目录名后?他们如何获得.txt扩展名?
答案 0 :(得分:1)
如果您只想将原始文件的第一行添加到除第一个分割之外的所有分支,您可以执行以下操作:
$ cat > a
h
1
2
3
4
5
6
7
^D
$ split -l 3
$ split -l 3 a 1
$ ls
1aa 1ab 1ac a
$ mv 1aa 21aa
$ for i in 1*; do head -n1 21aa|cat - $i > 2$i; done
$ for i in 21*; do echo ---- $i; cat $i; done
---- 21aa
h
1
2
---- 21ab
h
3
4
5
---- 21ac
h
6
7
显然,第一个文件将比中间部分少一行,最后一部分也可能更短,但如果这不是问题,这应该可以正常工作。当然,如果您的标题包含更多行,只需将head -n1
更改为head -nX
,X
即标题行数。
希望这有帮助。