我正在尝试访问只读存档上的一些卫星数据。我只对 zip 中的 .xml 中列出的与我的研究领域相匹配的某些坐标的文件感兴趣。
一年中的每一天都有多个文件。目前我关注的是 2015/07 文件夹。其中每个月的每一天都有一个单独的文件夹。每个日常文件夹都包含大量 .zip 文件和其他文件类型。
zip 文件的命名约定/结构始终相同,因此 .zip 文件名用于所有包含的文件中 - 后缀/文件扩展名的变化如下:
$unzip -l S1A_IW_GRDH_1SSV_20150701T135110_20150701T135135_006618_008D39_BE79.zip Archive: S1A_IW_GRDH_1SSV_20150701T135110_20150701T135135_006618_008D39_BE79.zip
Length Date Time Name
--------- ---------- ----- ----
0 07-08-2015 15:05 S1A_IW_GRDH_1SSV_20150701T135110_20150701T135135_006618_008D39_BE79.SAFE/
16099 07-08-2015 15:04 S1A_IW_GRDH_1SSV_20150701T135110_20150701T135135_006618_008D39_BE79.SAFE/manifest.safe
0 07-08-2015 15:05 S1A_IW_GRDH_1SSV_20150701T135110_20150701T135135_006618_008D39_BE79.SAFE/measurement/
861899961 07-08-2015 15:05 S1A_IW_GRDH_1SSV_20150701T135110_20150701T135135_006618_008D39_BE79.SAFE/measurement/s1a-iw-grd-vv-20150701t135110-20150701t135135-006618-008d39-001.tiff
0 07-08-2015 15:04 S1A_IW_GRDH_1SSV_20150701T135110_20150701T135135_006618_008D39_BE79.SAFE/annotation/
1685172 07-08-2015 15:04 S1A_IW_GRDH_1SSV_20150701T135110_20150701T135135_006618_008D39_BE79.SAFE/annotation/s1a-iw-grd-vv-20150701t135110-20150701t135135-006618-008d39-001.xml
0 07-08-2015 15:04 S1A_IW_GRDH_1SSV_20150701T135110_20150701T135135_006618_008D39_BE79.SAFE/annotation/calibration/
1013267 07-08-2015 15:04 S1A_IW_GRDH_1SSV_20150701T135110_20150701T135135_006618_008D39_BE79.SAFE/annotation/calibration/calibration-s1a-iw-grd-vv-20150701t135110-20150701t135135-006618-008d39-001.xml
317418 07-08-2015 15:05 S1A_IW_GRDH_1SSV_20150701T135110_20150701T135135_006618_008D39_BE79.SAFE/annotation/calibration/noise-s1a-iw-grd-vv-20150701t135110-20150701t135135-006618-008d39-001.xml
0 07-08-2015 15:05 S1A_IW_GRDH_1SSV_20150701T135110_20150701T135135_006618_008D39_BE79.SAFE/preview/
2437 07-08-2015 15:04 S1A_IW_GRDH_1SSV_20150701T135110_20150701T135135_006618_008D39_BE79.SAFE/preview/product-preview.html
124584 07-08-2015 15:05 S1A_IW_GRDH_1SSV_20150701T135110_20150701T135135_006618_008D39_BE79.SAFE/preview/quick-look.png
0 07-08-2015 15:05 S1A_IW_GRDH_1SSV_20150701T135110_20150701T135135_006618_008D39_BE79.SAFE/preview/icons/
95280 07-08-2015 15:05 S1A_IW_GRDH_1SSV_20150701T135110_20150701T135135_006618_008D39_BE79.SAFE/preview/icons/logo.png
1026 07-08-2015 15:04 S1A_IW_GRDH_1SSV_20150701T135110_20150701T135135_006618_008D39_BE79.SAFE/preview/map-overlay.kml
20088 07-08-2015 15:04 S1A_IW_GRDH_1SSV_20150701T135110_20150701T135135_006618_008D39_BE79.SAFE/S1A_IW_GRDH_1SSV_20150701T135110_20150701T135135_006618_008D39_BE79.SAFE-report-20150701T155156.pdf
0 07-08-2015 15:05 S1A_IW_GRDH_1SSV_20150701T135110_20150701T135135_006618_008D39_BE79.SAFE/support/
440 07-08-2015 15:04 S1A_IW_GRDH_1SSV_20150701T135110_20150701T135135_006618_008D39_BE79.SAFE/support/s1-product-preview.xsd
450 07-08-2015 15:04 S1A_IW_GRDH_1SSV_20150701T135110_20150701T135135_006618_008D39_BE79.SAFE/support/s1-map-overlay.xsd
471 07-08-2015 15:04 S1A_IW_GRDH_1SSV_20150701T135110_20150701T135135_006618_008D39_BE79.SAFE/support/s1-level-1-measurement.xsd
62654 07-08-2015 15:04 S1A_IW_GRDH_1SSV_20150701T135110_20150701T135135_006618_008D39_BE79.SAFE/support/s1-object-types.xsd
469 07-08-2015 15:04 S1A_IW_GRDH_1SSV_20150701T135110_20150701T135135_006618_008D39_BE79.SAFE/support/s1-level-1-quicklook.xsd
6427 07-08-2015 15:04 S1A_IW_GRDH_1SSV_20150701T135110_20150701T135135_006618_008D39_BE79.SAFE/support/s1-level-1-calibration.xsd
147222 07-08-2015 15:04 S1A_IW_GRDH_1SSV_20150701T135110_20150701T135135_006618_008D39_BE79.SAFE/support/s1-level-1-product.xsd
3956 07-08-2015 15:05 S1A_IW_GRDH_1SSV_20150701T135110_20150701T135135_006618_008D39_BE79.SAFE/support/s1-level-1-noise.xsd
因此,如果我选择一个月中的某一天,我可以使用以下命令检查每个 .kml 文件中的每个坐标:
unzip -p S1A_IW_GRDH_1SSV_20150701T135110_20150701T135135_006618_008D39_BE79.zip S1A_IW_GRDH_1SSV_20150701T135110_20150701T135135_006618_008D39_BE79.SAFE/preview/map-overlay.kml`
给出整个 .kml 文件的内容:
<?xml version="1.0" encoding="UTF-8"?>0_20150701T135135_006618_008D39_BE79.SAFE<kml xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:gml="http://wwsa.int/safe/sentinel-1.0/sentinel-1" xmlns:s1sar="http://www.esa.int/safe/sentia.int/safe/sentinel-1.0/sentinel-1/sar/level-2" xmlns:gx="http://www.google.com
<Document>
<name>Sentinel-1 Map Overlay</name>
<Folder>
<name>Sentinel-1 Scene Overlay</name>
<GroundOverlay>
<name>Sentinel-1 Image Overlay</name>
<Icon>
<href>quick-look.png</href>
</Icon>
<gx:LatLonQuad>
<coordinates>-115.928909,35.970608 -118.750404,36.374107 -118.459686,
</gx:LatLonQuad>
</GroundOverlay>
</Folder>
</Document>
</kml>
但是,我需要在 2015 年和 2016 年的每一天都执行此操作,所以我想做的是:循环遍历 zip 文件并打印 .zip 文件的名称以及包含的 .xml 文件中具有 co 的行- 其中的坐标:
<coordinates>-115.928909,35.970608 -118.750404,36.374107 -118.459686,
</gx:LatLonQuad>
我不希望有人完全为我写这篇文章,但一开始的一些帮助会很有帮助。
答案1
从这样的事情开始:
for zf in *.zip ; do
base=${zf/\.zip/}
echo "$zf"
unzip -p "$zf" "$base.SAFE/preview/map-overlay.kml" |
sed -ne '/<gx:/,/<\/gx:/p'
done
这会将每个 .zip 文件中的 .../map-overlay.kml 文件传输到,它仅打印和sed
之间的行。<gx:
</gx:
或者,如果您只需要该<coordinates>
行,请将sed
脚本更改为:
sed -ne '/<coordinates>/p'
但请注意,虽然这些sed
脚本可以处理示例数据,但如果您使用正则表达式进行提取,即使是从 XML 文件中简单提取几行也可能会失败。如果我不说:
不解析 XML 或 HTML用正则表达式。这就是为什么它不起作用。
使用的话效果xmlstarlet
会更好。一个perl
或python
脚本,使用他们的 XML 解析库之一会更好。顺便说一句,两者perl
都有python
用于处理 .zip 文件的库模块......因此整个工作可以用这两种语言中的任何一种来完成。