Bash csv файл для json new file

Самый быстрый способ сделать это:

    {React.cloneElement(this.props.children, this.props)}
-4
задан Jess 13 July 2018 в 23:40
поделиться

2 ответа

Хорошо, что предыдущий ответ jq более изящный. Я сделал это, используя только bash ... Так как я закончил, я все равно помещал его сюда, но после этого приятного ответа от @peak я чувствую себя немного глупо.

К OP первый из них свободен , Для будущих вопросов пользователи здесь помогут вам, но вам нужно начать работу с конкретной проблемой, с которой вам нужна помощь: -)

#!/bin/bash

csvfile='input.csv'

# Make sure the file exists
if [ ! -f $csvfile ]
then
    echo "ERROR: file $csvfile does not exist."
    exit 1
fi

# Read the input file line per line
while read line
do
    # Capture the information out of the line, fields separated by ;
    IFS=';' read pid pname price desc <<< $line

    # Output the JSON for this line
    echo '{'
    echo "    \"title\":$pname,"
    echo "    \"price\":$price,"
    echo "    \"description\": {"
    echo "        \"plain_text\":$desc"
    echo "    },"
    echo "    \"Predifined\":\"static content\","
    echo "    \"Another Predifined\":\"static content\""
    echo '}'

    # Just to split the line's output
    echo ""
done <$csvfile

Что производит этот вывод:

{
    "title":"Product Name",
    "price":"Price",
    "description": {
        "plain_text":"Description"
    },
    "Predifined":"static content",
    "Another Predifined":"static content"
}

{
    "title":"Example",
    "price":"200",
    "description": {
        "plain_text":"Descripcion here..."
    },
    "Predifined":"static content",
    "Another Predifined":"static content"
}

{
    "title":"Example2",
    "price":"300",
    "description": {
        "plain_text":"Some here..."
    },
    "Predifined":"static content",
    "Another Predifined":"static content"
}

Вторая версия того же скрипта, который выведет каждый раздел продукта в собственный файл JSON. Обратите внимание, что я удаляю первую строку CSV-файла, так как это просто заголовки, и я не хочу создавать файл для заголовков.

#!/bin/bash

csvfile='input.csv'

# Make sure the file exists
if [ ! -f $csvfile ]
then
    echo "ERROR: file $csvfile does not exist."
    exit 1
fi

# Read the input file line per line
sed '1d' $csvfile | while read line
do
    # Capture the information out of the line, fields separated by ;
    IFS=';' read pid pname price desc <<< $line

    # Strip the " from $pid and define the output filename
    output_filename="$(echo $pid | tr -d '"').json"

    # Output the JSON for this line
    echo '{'                                               >$output_filename
    echo "    \"title\":$pname,"                          >>$output_filename
    echo "    \"price\":$price,"                          >>$output_filename
    echo "    \"description\": {"                         >>$output_filename
    echo "        \"plain_text\":$desc"                   >>$output_filename
    echo "    },"                                         >>$output_filename
    echo "    \"Predifined\":\"static content\","         >>$output_filename
    echo "    \"Another Predifined\":\"static content\""  >>$output_filename
    echo '}'                                              >>$output_filename

    # Just to split the line output
    echo ""                                               >>$output_filename
done

Некоторые могут комментировать, что с помощью этого документа вместо того, чтобы делать несколько эхо-заявлений, подобных этому, будут более эффективными, но я нахожу, что здесь docs испортили отступ, и я начал с исходного скрипта, это было быстрее, как это.

1
ответ дан Nic3500 17 August 2018 в 12:05
поделиться
  • 1
    Я не работаю для меня! Я не знаю, как это использовать. Сценарий работает хорошо, может помочь мне создать файл для каждого ID. Пример Идентификатор продукта 1 & gt; 1.cvs Идентификатор продукта 2 & gt; 2.cvs Это возможно? Спасибо! – Jess 15 July 2018 в 21:03
  • 2
    Конечно, посмотрите на ответ, я добавил вторую версию скрипта. – Nic3500 16 July 2018 в 11:12
  • 3
    Nic3500 ваш скрипт GREAT, thx so muchhhhhhhhh. Awesomeeeee! Bonus track =) Его можно добавить к этому скрипту, как это bash whit if Я пытаюсь, но giveme error! Зачем ? – Jess 16 July 2018 в 15:18
  • 4
    Нет проблем. Если бы вы могли принять ответ, я был бы признателен. Что касается вашего "bash whit if & quot; Я не понимаю, пожалуйста, добавьте подробности. – Nic3500 16 July 2018 в 23:44
  • 5
    Thx Nic3500 Мне нравится улучшать файл, это отлично работает, мне нравится добавлять еще 3 столбца "price_combination & quot; (пример 20, 300 или 500 $) и другой столбец " Цвет & Quot; (например, красный, белый и т. д.). Я хочу сделать условие, если цена равна 0, цена находится в & quot; price_conbination & quot; и имеют "цвет" слишком. могу ли я добавить к генерации имя json + цвет и цену + сочетание_цены? я прикрепляю 1.csv для получения дополнительной информации link – Jess 17 July 2018 в 01:16

После фиксации вашего ввода так, чтобы он был правильно разделен запятой:

jq -R 'split(";")
| map(gsub("^\"|\"$";""))
| {title:.[1],
   price: .[2],
   description: { plain_text: .[3] }}' input.csv

дает:

{
  "title": "Product Name",
  "price": "Price",
  "description": {
    "plain_text": "Description"
  }
}
{
  "title": "Example",
  "price": "200",
  "description": {
    "plain_text": "Descripcion here..."
  }
}
{
  "title": "Example2",
  "price": "300",
  "description": {
    "plain_text": "Some here..."
  }
}
3
ответ дан peak 17 August 2018 в 12:05
поделиться
  • 1
    Я запускаю это в консоли и говорю об ошибке !!! Зачем ? root @ mail: / var / www # jq -R 'split (& quot ;; & quot;) | карта (GSUB (& Quot; ^ \ & Quot; | \ & Quot; $ & Quot ;; & Quot; & Quot;)) | {Идентификатор продукта:. [1], цена:. [2], описание: {plain_text:. [3],}} 'id.csv error: синтаксическая ошибка, неожиданный IDENT, ожидающий'} 'split (& quot ;; & quot; ;) | карта (GSUB (& Quot; ^ \ & Quot; | \ & Quot; $ & Quot ;; & Quot; & Quot;)) | {Идентификатор продукта:. [1], цена:. [2], описание: {plain_text:. [3],}} 1 ошибка компиляции – Jess 15 July 2018 в 20:00
  • 2
    Если вы хотите включить пробел в ключевое имя, вам придется процитировать его: «Идентификатор продукта» и т. Д. – peak 15 July 2018 в 20:54