summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rwxr-xr-xscripts/csv2geojson40
1 files changed, 29 insertions, 11 deletions
diff --git a/scripts/csv2geojson b/scripts/csv2geojson
index 47b481c..988ead0 100755
--- a/scripts/csv2geojson
+++ b/scripts/csv2geojson
@@ -1,23 +1,41 @@
1#! /bin/bash 1#! /bin/bash
2 2
3# show each field with index in csv 3# -s to skip specify columns of longitude and latitude
4echo -------------- > /dev/tty 4for i in "$@"
5head -1 $1 | sed 's/,/ /g' | awk '{for (i=1; i<=NF; i++) printf $i "_" i " "; print ""}' > /dev/tty 5do
6case $i in
7 -s)
8 lon_col=0
9 lat_col=1
10 shift
11 ;;
12 *)
13 csv=$i
14 shift
15 ;;
16esac
17done
6 18
7echo -------------- > /dev/tty 19# if no -s option, just read from input
8echo > /dev/tty 20if [ "$lon_col" != "0" ]; then
21 # show each field with index in csv
22 echo -------------- > /dev/tty
23 head -1 < $csv | sed 's/,/ /g' | awk '{for (i=1; i<=NF; i++) printf $i "_" i " "; print ""}' > /dev/tty
24 echo -------------- > /dev/tty
25 echo > /dev/tty
9 26
10# get index of lon/lat column 27 # get index of lon/lat column
11read -p "Number of latitude column: " lat_col 28 read -p "Number of latitude column: " lat_col
12read -p "Number of longitude column: " lon_col 29 read -p "Number of longitude column: " lon_col
30fi
13 31
14cat $1 | 32cat $csv |
15# move lon/lat column to the start 33# move lon and lat to the first and second column
16awk -F',' -v lon_th=$lon_col -v lat_th=$lat_col '\ 34awk -F',' -v lon_th=$lon_col -v lat_th=$lat_col '\
17 BEGIN{OFS=","}\ 35 BEGIN{OFS=","}\
18 {printf $lon_th "," $lat_th; for (i=1; i<= NF; i++) if (i != lat_th && i != lon_th) printf "," $i; print ""}\ 36 {printf $lon_th "," $lat_th; for (i=1; i<= NF; i++) if (i != lat_th && i != lon_th) printf "," $i; print ""}\
19 ' |\ 37 ' |\
20# change csv into array format 38# change csv into array format, like [lon, lat, "field1", field2...]
21sed 's/[^,]*/"\0"/g; s/.*/[\0]/g' |\ 39sed 's/[^,]*/"\0"/g; s/.*/[\0]/g' |\
22# wrap other fields as a json object, like [lon, lat, {...}] 40# wrap other fields as a json object, like [lon, lat, {...}]
23jq -s '.[0][2:] as $fields | .[1:][] | [.[0], .[1], ([$fields, .[2:]] | transpose | map({(.[0]): .[1]}) | add)]' |\ 41jq -s '.[0][2:] as $fields | .[1:][] | [.[0], .[1], ([$fields, .[2:]] | transpose | map({(.[0]): .[1]}) | add)]' |\