읽기 전용 아카이브의 일부 위성 데이터에 액세스하려고 합니다. 내 연구 분야와 일치하는 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 파일의 행을 인쇄합니다. 동등 어구:
<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
. XML 구문 분석 라이브러리 중 하나를 사용하는 스크립트 perl
가 python
더 좋습니다. 그런데 둘 다 .zip 파일을 처리하기 위한 라이브러리 모듈을 perl
가지고 있으므로 python
전체 작업을 두 언어 중 하나로 수행할 수 있습니다.