С помощьюjq
(https://stedolan.github.io/jq/)вы можете сделать это:
jq -r '{ id, text, lang:.user.lang } | select (.lang == "en") | [.id,.text,.lang ] | @csv' 30.json
Это должно дать вам требуемый результат:
980369176291262500,"RT @Q_cupid: กระแสใส่ชุดไทยมาแรงอันนี้เข้าใจ แต่ที่ไม่เข้าใจคือคนที่กล้าไปขโมยชุดไทยที่เค้าเอาไว้ไปแก้บนตามศาลนี่แหละ อีเวงง ขโมยไปเกือบ100…","en"
Чтобы записать вывод в файл, просто перенаправьте его:
jq -r '{ id, text, lang:.user.lang } | select (.lang == "en") | [.id,.text,.lang ] | @csv' 30.json > output.csv
Обратите внимание, что я изменил пример JSON из вашего вопроса, чтобы сделать его допустимым. Похоже, вы отбрасываете большую часть данных, так что это не должно вызвать никаких проблем.
Протестируйте файл, вызывающий сбой, с помощью команды file -в Linux и сравните его с файлами, не вызывающими сбой -.
Скорее всего, имеется несоответствие в кодировке файла -и, возможно, задействовано какое-то нежелательное автоматическое -обнаружение.
Linux предлагает UTF -8 на большинстве систем уже 20 лет, и вы не должны это менять. Windows была позже на вечеринке, но более поздние установки также должны использовать utf -8 по умолчанию.
Некоторые редакторы могут иметь старую настройку по умолчанию, например CP850 или ISO -LATIN -x, где x — это число или что-то еще..
Чтобы избежать двусмысленности, были предприняты шаги, чтобы поместить спецификацию в начало файла, что еще больше усугубляет проблему, потому что, например, сценарии оболочки в Linux используют Shebang (, как#!/bin/bash
)в начало и вообще не принимайте спецификацию.
Если возможно, установите для всех ваших инструментов кодировку UTF -8 и по возможности конвертируйте старые файлы (программа для Linux :iconv ).
С
file clean-and-easy.txt
file crashing.txt
вы должны сначала посмотреть, сообщает ли что-то команда файла, например ascii-text with BOM
или UTF-8 Unicode text
.