Преобразование простых данных в json файл

Да, просто удалите скобки и запятые, и готово.

mv "test.csv" "bob.csv" "foobar.csv" /file/path
1
10.06.2017, 00:59
4 ответа

Ответ на вторую часть -преобразование файлов json в таблицу.

Использование:./json_to_table.sh *.json

#!/bin/bash

for i in "$@"; do
    file_content=$(sed -n 's/".*":"\(.*\)",\?/\1/p' "$i" | tr '\n' ' ')
    printf "%s %s\n" "$i" "$file_content"
done | column -t

Если вам не нужен красивый формат таблицы, вы можете удалить | column -tчасть (внизу, послеdone). Тогда поля строки будут разделены одним пробелом, следовательно, каждое будет иметь свою ширину. Он хорош для парсинга программами типа awk, sed, но неудобен для чтения человеком.

Примечание:после каждой записи в файле json, кроме последней, должна стоять запятая. Что я имею в виду:

"field8":"310000", <- here
"field9":"si", <-here
"field10":"2017-06-05" <- not here. Last record without comma.
}
1
27.01.2020, 23:13
for file in *; do
    awk 'BEGIN { print "{" }  END { print "\n}" } { printf( "%s",newrec); printf( "\"field%d\": \"%s\"", NR, $0); newrec=",\n" }' "$file" > "${file}.json"
done

NR— количество записей (или строк )в файле, которые уже были обработаны. Это 1при работе в первой строке, 2во второй строке и так далее.

$0— вся неизмененная входная запись (или строка ).

Если имена полей совпадают, вы можете определить массив (e. г.labels[])в строфе BEGIN, а затем обращаться к ним по индексу (e. г.labels[NR]).

1
27.01.2020, 23:13

Я бы решил эту проблему с помощьюинструмента jq(подходящего инструмента для анализа/манипулирования JSON):

for f in *; do
    jq -R -s 'rtrimstr("\n") | split("\n") | to_entries | reduce.[] as $o ({};.["field" + ($o.key+1|tostring)] |= $o.value )' "$f" > "$f".json; 
done

  • -R(--raw-input)в сочетании с-s(--slurp)-передать все входные данные в фильтр как одну длинную строку
5
27.01.2020, 23:13

Итак, окончательный сценарий для первой части:

for file in facturas/*; do
    awk 'BEGIN {
        split("fechae tpago ruc nfactura total iva10 iva5 iva0 archivado fechap",campos)
        print "{" 
    }
    END {
        print "\n}" 
    }
    {
        printf( "%s",newrec)
        printf( "\"%s\":\"%s\"", campos[NR], $0)
        newrec=",\n"
    }' "$file" > "${file}.json"
done

И окончательный результат для второй части:

#!/bin/bash

for i in "$@"; do
    printf "%s " "$i"
    sed -n 's/".*":"\(.*\)"/\1/p' "$i" | tr ',\n' ' ' 
    echo
done | column -t

Спасибо всем за проявленный интерес.

0
27.01.2020, 23:13

Теги

Похожие вопросы