2016-05-11 2 views
4

J'ai reçu cette question lors d'une interview. J'ai dit que je pouvais le faire avec Java ou Python comme xreadlines() fonction pour parcourir le fichier entier et aller chercher la colonne, mais l'intervieweur voulait que j'utilise simplement linux cmd. Comment puis-je y parvenir?Comment puis-je obtenir la deuxième colonne d'un très gros fichier csv en utilisant la commande linux?

+0

compte tenu de la brièveté ici, je vous donne une réponse complète la manière paresseuse possible: premier rendez-vous ici http://stackoverflow.com/questions/1521462/looping-through-the-content-of-a-file-in-bash alors allez ici http://stackoverflow.com/questions/19737675/shell-script-how-to-extract -string-using-regular-expressions et utilisez '^. *, (. *),. * $' (ou quelque chose à cet effet) pour le regEx – Deryck

Répondre

3

Vous pouvez utiliser la commande awk.

Ci-dessous un exemple d'imprimer la deuxième colonne d'un fichier:

awk -F, '{print $2}' file.txt 

Et pour stocker, vous rediriger dans un fichier:

awk -F, '{print $2}' file.txt > output.txt 
+0

Merci, alors que cela résout le problème du fichier csv, que diriez-vous ' point? Puis-je sortir la colonne dans un fichier en utilisant awk? – Pythoner

+1

Redirection d'E/S standard pour créer un fichier des résultats. 'Awk -F, '{print $ 2}' file.txt>/some/file/path' –

+1

Les solutions ci-dessus utilisant awk ne fonctionneront pas sans le drapeau -F. Awk se sépare sur l'espace blanc par défaut, pas des virgules. – davlet

2

Vous pouvez utiliser cut:

cut -d, -f2 /path/to/csv/file 
1

J'ajouterais à réponse Andreas, mais ne peux pas encore commenter. Avec csv, vous devez donner à awk un argument de séparateur de champs, ou définir des champs liés par des espaces au lieu de virgules. (. De toute évidence, csv qui utilise un séparateur de champ différent aura besoin d'un autre caractère à déclarer)

awk -F, '{print $2}' file.txt