Переименование файлов JSON на основе их содержимого - PullRequest
0 голосов
/ 18 октября 2019

У меня есть множество географических файлов json с именем date_geohash.json и мне нужно конвертировать их в формат date_latitude-longotude.json. Например мне нужно конвертировать 2017-03-28_u13hhyn.json в 2017-03-28_N52.76-E1.62.json. Я пытаюсь написать bash-скрипт для переименования этих файлов json, используя утилиты rename и jq (запрос json). Используя jq, я могу извлечь широту и долготу из файлов json.

jq '"\(.latitude)-\(.longitude).json"' 2017-03-28_u13hhyn.json

дает мне

“52.768471-1.623297.json"

Однако я не знаю, как урезать цифры широты и долготы и переименоватьфайлы JSON.

Ответы [ 2 ]

0 голосов
/ 19 октября 2019

Следуя Эндрю-коду, я пришел к выводу:

#!/bin/bash

for file in *.json; do
  prefix=${file%%_*} 
  latitude=$(jq '.latitude' ${file})
  longitude=$(jq '.longitude' ${file})

  if (( $(echo "$longitude > 0" | bc -l) )); then
    new_name=$(printf "%s_N%.2f-E%.2f.json" ${prefix} ${latitude} ${longitude})
  else
    Longitude=${longitude#-}
    new_name=$(printf "%s_N%.2f-W%.2f.json" ${prefix} ${latitude} ${Longitude})
  fi

  mv ${file} ${new_name}
done;

Мне интересно, как я могу использовать один printf вместо двух?

0 голосов
/ 18 октября 2019

Может быть, лучше извлечь широту и долготу в переменные, а затем манипулировать в нужный формат файла с помощью printf. Затем просто переименуйте файл. Вот базовый пример:

#!/bin/bash

declare    directory="/some/directory/path"
declare    pattern="*_*.json"

cd ${directory}
for file in ${pattern}; do
  prefix=${file%%_*}    # Remove first underscore and everything following.
  latitude=$(jq '.latitude' ${file})
  longitude=$(jq '.longitude' ${file})
  new_name=$(printf "%s_N%.2f-E%.2f.json" ${prefix} ${latitude} ${longitude})
  mv ${file} ${new_name}
done;

Примечание 1: printf не усекает числа, а округляет их, что даст более точные результаты.

Примечание 2: У меня жесткозакодировал 'N' и 'E' в имя файла, предполагая, что широта и долгота будут отрицательными для S и W. Если это не так, требуется немного больше работы, но принцип остается прежним.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...