L'analyse de la première colonne d'un fichier csv dans un nouveau fichier
Système D'exploitation: OSX Méthode: à partir de la ligne de commande, donc en utilisant sed, cut, gawk, bien que de préférence pas de modules d'installation.
Essentiellement, j'essaie de prendre la première colonne d'un fichier csv et de l'analyser dans un nouveau fichier.
Exemple de fichier d'entrée
EXAMPLEfoo,60,6
EXAMPLEbar,30,6
EXAMPLE1,60,3
EXAMPLE2,120,6
EXAMPLE3,60,6
EXAMPLE4,30,6
Sortie de désir
EXAMPLEfoo
EXAMPLEbar
EXAMPLE1
EXAMPLE2
EXAMPLE3
EXAMPLE4
Donc je veux la première colonne.
Voici ce que j'ai essayé jusqu'à présent:
awk -F"," '{print $1}' in.csv > out.txt
awk -F"," '{for (i=2;i<=NF;i++)}' in.csv > out.txt
awk -F"," 'BEGIN { OFS="," }' '{print $1}' in.csv > out.txt
cat in.csv | cut -d , -f 1 > out.txt
Aucun ne semble fonctionner, soit ils impriment simplement la première ligne ou rien du tout, donc je suppose il ne lit pas Ligne par ligne.
4 réponses
Votre dernière option fonctionne parfaitement pour moi:
$ cat > in.csv # Then pasted the example input followed by Ctrl+D:
EXAMPLEfoo,60,6
EXAMPLEbar,30,6
EXAMPLE1,60,3
EXAMPLE2,120,6
EXAMPLE3,60,6
EXAMPLE4,30,6
[Ctrl+D]
$ cat in.csv | cut -d, -f1
EXAMPLEfoo
EXAMPLEbar
EXAMPLE1
EXAMPLE2
EXAMPLE3
EXAMPLE4
Peut - être que les fins de ligne vous mordent ici? Si le fichier a des terminaisons de ligne de style DOS ou même de style Mac, cela peut provoquer un comportement étrange. Essayez d'exécuter file in.csv
et voyez ce qu'il arrive.
$ file in.unix.csv
in.unix.csv: ASCII text
$ file in.dos.csv
in.dos.csv: ASCII text, with CRLF line terminators
Si ce dernier est votre situation, utilisez l'Outil dos2unix
pour convertir le fichier.
Edit: Sur OS X, il semble flip
est ce que vous voulez.
J'ai copié-collé votre exemple d'entrée, l'ai enregistré comme dans.csv, puis a couru votre première ligne,
awk -F"," '{print $1}' in.csv > out.txt
Et cela a parfaitement fonctionné, comme ceci:
$ emacs in.csv
$ cat in.csv
EXAMPLEfoo,60,6
EXAMPLEbar,30,6
EXAMPLE1,60,3
EXAMPLE2,120,6
EXAMPLE3,60,6
EXAMPLE4,30,6
$ awk -F"," '{print $1}' in.csv > out.txt
$ cat out.txt
EXAMPLEfoo
EXAMPLEbar
EXAMPLE1
EXAMPLE2
EXAMPLE3
C'est dans le Terminal.application sur OS X 10.5
Pour moi, cut produit le résultat attendu:
cut -d, -f1 < in.csv > out.txt
Si Perl est une option:
perl -F, -lane 'print $F[0]' in.csv > out.txt
Ces options de ligne de commande sont utilisées:
-
-n
boucle autour de chaque ligne du fichier d'entrée -
-l
supprime les nouvelles lignes avant le traitement, et les ajoute ensuite -
-a
mode autosplit-diviser les lignes d'entrée dans le tableau@F
. Par défaut à fractionnement sur les espaces. -
-e
exécute le code perl -
-F
modificateur autosplit, dans ce cas se divise sur,
@F
est le tableau de mots dans chaque ligne, indexé en commençant par $F[0]