Portál AbcLinuxu, 8. května 2025 22:35
Ahoj.
Hledam nejjednodussi zpusob zameny hodnoty tagu "name" za hodnotu v tagu "speed".
Mam GPS data v KML formatu, ale Google Earth zobrazuje automaticky jenom jmeno tagu. Chtel bych tam mit radsi rychlost.
Myslite, ze musim napsat scriptik, kterej vezme vsechny ty hodnoty v tagu "Placemark", premeni to a pak je zapise do noveho souboru? Nebo se to da udelat jednoduseji?
Tady je jeden placemark. Samozrejme jich je tisice v jednom souboru.
<Placemark> <name>-617</name> <Snippet/> <description><![CDATA[ <table> <tr><td>Longitude: 151.077010 </td></tr> <tr><td>Latitude: -33.733747 </td></tr> <tr><td>Altitude: 184.100 meters </td></tr> <tr><td>Speed: 70.8 km/hour </td></tr> <tr><td>Heading: 15.9 </td></tr> <tr><td>Time: 2009-09-26T23:42:51Z </td></tr> </table> ]]></description> <LookAt> <longitude>151.077010</longitude> <latitude>-33.733747</latitude> <tilt>66</tilt> </LookAt> <TimeStamp><when>2009-09-26T23:42:51Z</when></TimeStamp> <styleUrl>#track</styleUrl> <Point> <coordinates>151.077010,-33.733747,184.100000</coordinates> </Point> </Placemark>
Ma to pevnou strukturu. Asi to v bash nactu radek po radku jako promenou a sedem to nejak vystrihnu. XSLT neznam...
Myslim, ze se to bude hodit spouste lidem, kteri logujou GPS data ( treba v aute) a pak si to chteji prohlednout na Google Earth.
Tak scriptik mam skoro hotovy. Nacitam radky do array. Ted bych potreboval pomoc. Jak vyndat rychlost a vlozit ji do tagu "name"? Myslim, ze asi pouzitim "sed", ze?
Potrebuji jen tu rychlost "70.8 km/hour".
speed=$(echo -e " Speed: 70.8 km/hour " | sed ...)
A pak nejak nahradit to cislo v tagu "name". To asi take s pomoci "sed", ze? Samozrejme zverejnim scriptik, az bude hotov i s postupem, jak loguju GPS data, kdyz jedu na motorce, a pak je zobrazuji v Google Earth. Diky za pomoc.
Tak jsem tak nejak sbastlil tu rychlost:
echo -e " Speed: 70.8 km/hour " | sed -e 's/<[^>]*>//g' speedline.txt | sed -e 's/Speed://g'
Tak jsem to tak nejak udelal:
LINEARRAY[8] je radek s rychlosti
LINEARRAY[1] je radek s tagem "name"
changeName(){ SPEED=$(echo ${LINEARRAY[8]} | sed -e 's/<[^>]*>//g' speedline.txt | sed -e 's/Speed://g') LINEARRAY[1]=$(echo ${LINEARRAY[1]} | sed -e 's/-[0-9]/SPEED/')
Problem je, ze nemuzu nahradit SPEED za variable SPEED. Kdyz tam dam '$SPEED' tak mi to hazi mi to error.
Tak jsem to uplacal:
changeName(){ SPEED="$(echo ${LINEARRAY[8]} | sed -e 's/<[^>]*>//g' | sed -e 's/.*Speed://g')" TEMP1=$(echo -e "${LINEARRAY[1]}" | sed -e 's/-[0-9]*<\/name>//') TEMP2=$(echo -e "${LINEARRAY[1]}" | sed -e 's/.*<name>-[0-9]*//') TEMP=$TEMP1$SPEED$TEMP2 LINEARRAY[1]=$TEMP }
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.