Объединить для петли с кошкой и json2html - PullRequest
0 голосов
/ 01 июля 2018

Я пытаюсь конвертировать JSON-файлы в HTML-файлы. Поэтому я могу позже импортировать их на сайт. Моя идея - запустить json2table , чтобы создать таблицу и записать ее в каталог html. Но я не выясняю, как можно перенаправить вывод json2table.

for file in $(ls json/*.json); do cat $file | json2table > html/$file.html; done

Но на этом конец

bash: html/json/26.json.html: No such file or directory

Есть ли кто-нибудь, кто может помочь исправить ошибку? Спасибо

Сильвио

Ответы [ 3 ]

0 голосов
/ 01 июля 2018

Ваш ${file} включает каталог json. Если у вас нет каталога html/json, перенаправление не удастся.
Я думаю, что у вас есть subdir html и удаление пути из ${file} будет работать:

for file in json/*.json; do 
   cat "${file}" | json2table > html/"${file#*/}".html
   # OR avoid cat with
   # json2table < "${file}" > html/"${file#*/}".html
done

В качестве бонуса я удалил ls, добавил кавычки для имен файлов с пробелами и показал в комментарии, как избежать cat.

0 голосов
/ 02 июля 2018

Я хочу дать весь полный сценарий, если у людей есть такая же проблема / проект или как это будет называться.

Первый цикл генерирует таблицу HTML из файлов JSON и сохраняет ее в файле HTML. Второй цикл объединяет результат первого цикла с шаблоном, так что у вас есть полная страница. В теге body просто включается поиск, удаление и заполнение таблицы.

#!/bin/bash

jdata="json"
hdata="html" 
template="tpl/tpl.html"
tmp="tmp"

# convert json to html
# /10277352/obedinit-dlya-petli-s-koshkoi-i-json2html#10277355

for file in $jdata/*.json;
do
    # php
    #php json.php $file > tmp/${file#*/}.html

    # ruby
    json2table < "${file}" > $hdata/"${file#*/}".html
done

# write html file 
# https://unix.stackexchange.com/questions/32908/how-to-insert-the-content-of-a-file-into-another-file-before-a-pattern-marker

for file in html/*.html;
do
    # extract Project Number for newfile 
    filename="$(basename -- "$file")"
    extension="${filename#*.}"
    filename="${filename%.*}"

    # save the project number
    NO="$(grep "No" $jdata/$filename | sed 's/[^0-9]*//g')"
    OUT="$NO.html"

    # write new html file
    sed 's/include/$x/g' tpl/tpl.html | x="$(<$file)" envsubst '$x' > html/$OUT

done

Спасибо за помощь и хороший день Сильвио

0 голосов
/ 01 июля 2018

Ваша команда ls возвращает каталог и имя файла.

Ex. json / 1.json json / 2.json json / 3.json

Так же:

for file in $(/bin/ls json/*.json)
do
    cat $file | json2table >html/$(basename $file).html
done
  • Я всегда использую полный путь для ls в таких условиях, поскольку хочу убедиться, что я не использую псевдоним, который мог бы быть для него определен.
  • basename удаляет каталог из $ file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...