0
votes

Traiter avec des chevreuils dans la ligne de lecture

Peut-être que j'utilise le mauvais outil pour le travail ici ...

Mes données ressemblent à ceci (ceci est à partir d'un fichier JSON qui a été converti en CSV): P>

| hostname1 | 1 | |
| hostname2 | 1 | |
| hostname3 | 0 | yay_some_text, more_text, more_text |


3 commentaires

Avez-vous essayé JQ ? Dans votre cas, il peut être utilisé pour préparer un csv à partir de JSON avec une structure plus simple.


@Samdaniel Le CSV vient de JQ, haha. La sortie de l'un des champs a eu des pauses de ligne: / (présentées comme \ n) que j'ai reformatées à l'aide de JQ -R ...


@ user3229731 Vous avez accepté la première réponse que vous avez obtenue et malheureusement, elle est complètement fausse car elle sera extrêmement lente et échoue de manière nouvelle et passionnante donnée à diverses valeurs d'entrée, contenus du répertoire que vous exécutions et les paramètres de variable d'environnement. Voir unix.stackexchange.com/questions/169716/... pour Certains des problèmes. Vous voudrez peut-être poser une nouvelle question et cette fois lui donner un certain temps pour voir quelles réponses vous obtenez à mesure que la première réponse que vous obtenez peut ne pas toujours être la meilleure.


3 Réponses :


0
votes

Dans votre cas, une solution est que vous pouvez transformer le fichier en une structure plus simple avant d'utiliser xxx

si tout ce que vous voulez faire est d'afficher comme une table, vous pouvez utiliser < code> colonne utilitaire xxx

si vous êtes un tel particulier sur le sépérateur de départ et de fin, vous pouvez simplement tuyer la sortie de cette commande à un < Code> sed | awk .


2 commentaires

C'est fondamentalement fait, merci! Il y a un peu de logique dans la table afin que la colonne n'est pas une excellente option. Merci encore: D


C'est l'un de ces cas où quelqu'un demande comment charger leur arme en regardant le tonneau et au lieu de les conseiller de ne pas le faire, vous leur montrez comment :-). S'il n'est pas trop tard - ne fais pas ça!



1
votes
$ gawk -v RS='"\n' -v FPAT='[^,]*|"[^"]*"' -v OFS=' | ' '
           {gsub(/"/,""); $1=$1; print OFS $0 OFS}' file


 | hostname1 | 1 |  |
 | hostname2 | 1 |  |
 | hostname3 | 0 | yay_some_text
more_text
more_text
 |

0 commentaires

4
votes

Quelle que soit celle de ceux-ci que vous préférez fonctionnera robustablement * et utilisez efficacement n'importe quel awk dans n'importe quelle coquille sur chaque case Unix: xxx

. xxx < p>. xxx

. xxx

* en supposant de manière robuste que vos chaînes citées ne contiennent jamais de virgules ni de guillemets doubles évasés, c'est-à-dire On dirait que l'exemple que vous avez fourni et que votre code existant repose sur.


0 commentaires