Mon fichier .csv actuel contient neuf colonnes. Cependant, les deuxième et troisième colonnes sont vides et je souhaite les supprimer. Existe-t-il un moyen d'utiliser des commandes batch pour supprimer ces colonnes vides de mon fichier .csv ou exporter un nouveau fichier .csv sans ces colonnes vides?
windows
command-line
batch
csv
batchnoober
la source
la source
Réponses:
For /F
est capable d'analyser un fichier .csv. Sur une ligne, à exécuter directement à partir de l'invite de commande:Cela traverse ligne input.csv ligne par ligne et en utilisant une virgule comme séparateur, stocke la première valeur dans
%i
, la deuxième dans%j
, la troisième dans%k
et le reste de la chaîne (en utilisant un astérisque dans la liste des jetons) dans%l
. En imprimant toutes les valeurs sauf les deuxième et troisième, vous les supprimez efficacement.Toutefois,
for /F
ne compte pas les chaînes vides en tant que jetons. Par conséquent, la commande ne peut pas faire la différence entre deux virgules suivantes et une seule. Cette solution fonctionne si les colonnes vides ont un caractère d'espacement, mais peut sinon ignorer les mauvaises colonnes.Pour contourner cette restriction, nous pouvons écrire un fichier de commandes qui utilise le remplacement de chaîne pour insérer un espace entre deux virgules. Ce remplacement est exécuté deux fois pour faire face à la possibilité de trois virgules. Les guillemets
^"!line!^"
doivent indiquer qu'ilsfor /F
doivent fonctionner sur une chaîne au lieu d'un fichier et sont protégés pour éviter!line!
d'être évalués en tant que chaîne littérale plutôt qu'en tant que variable.Le résultat est un nouveau fichier .csv, identique à input.csv, à l'exception des deuxième et troisième colonnes omises.
la source
The,quick,brown,fox,,,the,lazy,dog
deviendraThe,,,fox, , ,the,lazy,dog
.Vous n'avez pas spécifié quel système d'exploitation. Si le vôtre vient avec
cut
, utilisez ceci.-d
définit le délimiteur, dans ce cas sur a,
. La virgule n'étant pas un caractère spécial, vous pouvez omettre les guillemets.-f
sélectionne les champs, dans ce cas le champ 1 et les champs de 4 à 9 (en omettant les champs 2 et 3).Un test réel de la commande:
Cut est livré préinstallé avec la plupart des systèmes d'exploitation (OS / X, distributions Linux, BSD, Solaris, etc.; à peu près tout le monde sauf DOS et Windows).
Si vous avez Windows, vous pouvez:
cut
commande dans un fichier de commandes.la source
for /f "tokens=5 delims= " %i in (file.txt) DO echo %i
-f1,4-
pour inclure toutes les colonnes après la troisième.4-
des moyens4-∞
.-f4-9
sur la première phrase du message OP "" J'ai neuf colonnes ", mais il-f4-
est plus flexible et moins typé. Une autre option aurait été d'utilisersed
.Je voudrais ouvrir le fichier CSV dans le Bloc-notes (ou n'importe quel éditeur de texte) et rechercher et remplacer
,,
par,
. Ceci, bien sûr, suppose que les données de vos colonnes ne les contiennent,,
pas.la source
En supposant que vous soyez sur Windows, le fichier n’a pas d’en-tête et que Powershell est à votre disposition, vous pouvez utiliser les éléments suivants:
Alors ça:
la source