2016-07-20 16 views
1

Ich habe ein Bash-Skript, das in Abfrage und generiert die JSON. Ich suche das neue JSON-Format alsgenerieren Snake Kleinbuchstaben Ausgaben von Bash-Skripte

{ "symbols" : "my_name" 
    "nid" : "MyName" 
} 

Könnten Sie mir bitte helfen bei der Modifizierung dieser Abfrage

QUERY='SELECT row_to_json(o) FROM (SELECT nid , nid(????) as symbols FROM batch_types ORDER BY id::integer) AS o'; 
echo $QUERY | psql -h localhost -U report mcore -t [email protected] | jq -s '.' > generated/enum/batch_type.json 

Ich erwarte einige sed nach jq als jq -s '.' | sed "..." zu erzeugen.

Ich bekomme Daten von postgreesql. Beispiel: Ausgabe von SQL `könnte

[ 
{"name" : "Xml" 
    "symbol" : "Xml" 
}, 
{ "name": "Java", 
    "symbols": "Java" 
} 
] 

zu

[ 
{"name" : "Xml" 
    "symbol" : "xml" 
}, 
{ "name": "Java", 
    "symbols": "java" 
} 
] 

Vielen Dank im Voraus :)

+0

Mit GNU sed: 'sed 's /.*/ \ L & /'' – SLePort

+0

wie erwähnt, wollen Snake Case und nicht alle Kleinbuchstaben mit sed bekommen. –

+0

[Bearbeiten] Ihre Frage, um ** klar ** prägnante, testbare Beispieleingabe und erwartete Ausgabe einzuschließen. Momentan sieht es so aus, als ob du Xml in xml und Java in Java in einigen Teilen deiner Datei ändern möchtest, aber idk was das mit snake case oder dem ersten Beispiel json zu tun hat, also deine Frage also sehr unklar und deine gepostete Sample Eingabe/Ausgabe (vorausgesetzt, dass es das ist, was es ist), hilft nicht dabei. –

Antwort

0

konnte ich sed -r '/symbol/ s/([a-z])([A-Z])/\1_\L\2/g' | awk '/^\{*[[:blank:]]*"symbol[s]?"[[:blank:]]*:/{ $0=tolower($0);}1'''

Vielen Dank allen für Ihre Bemühungen erhalten werden.

1

Ich würde es vorziehen, awk

awk 'BEGIN{RS="^$"}{print tolower($0)}' >outfile 

awk [ manpage ] sagt:

tolower(str)
Return eine Kopie des Strings str, mit allen ppercase Zeichen in str übersetzt in ihre entsprechenden Klein counterparts.Non-alphabetische Zeichen werden unverändert gelassen.

bearbeiten

Wenn Sie versuchen, nur die "Symbole" Wert konvertieren die unten in Kleinbuchstaben, verwenden:

...jq -s '.' | awk '/^\{*[[:blank:]]*"symbol[s]?"[[:blank:]]*:/{ 
$0=tolower($0);}1'' >outfile 

Ausgabe

[ 
{"name" : "Xml" 
    "symbol" : "xml" 
}, 
{ "name": "Java", 
    "symbols": "java" 
} 
] 

Nebenbei bemerkt:? mit awk-regex ist für ein Höchstmaß an einem Spiel, die entweder symbol oder symbols in diesem Fall passen würde.

+0

Könnten Sie bitte erarbeiten, wie es funktioniert, wie ich nur Symbole Feld auf diese Weise generieren muss ... Danke –

+0

@AnimeshJain: Diese Information wurde nicht in der Frage gegeben, so aktualisieren Sie bitte die Frage.Geben Sie mögliche Eingaben und erwartete Ausgaben an. Siehe das Update – sjsam

+0

Danke ... aber oben scheint nicht zu funktionieren ... kann wegen variabler Leerzeichen sein ?? –