Строка в кавычках во входных данных CSV становится дважды экранированной - PullRequest
0 голосов
/ 19 марта 2019

Я пытаюсь использовать JQ для обработки CSV, например, без заголовков столбцов:

cat "input.csv"
"12345678901234567890","2019-03-19",12

Есть ли более элегантный и читаемый способ удаления экранированных кавычек для первого и второго полей - и в целом, для построения потока объектов с таким вводом?


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

Текущий JQ-скрипт и вывод:

cat "input.csv" |
jq \
  --raw-input '
    . |
    split("\n") |
    map( split(",")) |
    .[0] |
    {
      ID: (.[0] | fromjson),
      date: (.[1] | fromjson),
      count: (.[2] | tonumber)
    }'

{
  "ID": "12345678901234567890",
  "date": "2019-03-19",
  "count": 1
}

Вывод того же скрипта без использованного | fromjson, который приводит к кавычкам, которых я бы хотел избежать:

{
  "ID": "\"12345678901234567890\"",
  "date": "\"2019-03-19\"",
  "count": 1
}

1 Ответ

1 голос
/ 19 марта 2019

Ваш вызов jq может быть упрощен до:

jq -R '
  split(",")
  | map(fromjson)
  | {ID: .[0], date: .[1], count: .[2] }'

Общее решение

jq -R --argjson header '["ID", "date", "count"]' '
  split(",")
  | map(fromjson)
  | [ $header, . ]
  | transpose
  | reduce .[] as $kv ({}; .[$kv[0]] =$kv[1]) '

Если вы хотите указать заголовки в файле, используйте команду --argfileопция линии вместо.

...