Comment sélectionner les 10 premières colonnes d'un entete du fichier csv à l'aide de PowerShell?
J'ai un fichier CSV appelé test.csv ($testCSV).
Il y a beaucoup de colonnes dans ce fichier, mais je tiens simplement à sélectionner les 10 premières colonnes et de mettre ces 10 colonnes dans un autre fichier CSV.
Veuillez noter que je N'AI PAS TOUTES les en-TÊTES de COLONNE ne peut donc pas sélectionner les colonnes basé sur un nom de colonne.
Les dessous de la ligne de code obtenir les 10 premières LIGNES du fichier:
$first10Rows = Get-Content $testCSV | select -First 10
Cependant j'ai besoin de toutes les données pour les 10 premières COLONNES et j'ai du mal à trouver une solution.
J'ai aussi eu un coup d'oeil à scinder le fichier, et la tentative de retour de la première colonne comme suit:
$split = ( Get-Content $testCSV) -split ','
$FirstColumn = $split[0]
J'avais espéré l' $split[0] serait de retour l'ensemble de la première colonne, mais il ne renvoie que le premier champ dans le fichier.
Toute aide dans la résolution de ce problème est très apprécié.
Merci d'avance.
****** Mise à JOUR******
Je suis en utilisant la méthode de réponse ci-dessous par vonPryz pour résoudre ce problème, à savoir:
Import-Csv -Delimiter "," -Header @("a","b","c") -Path $testCSV | Select a,b
Cependant, je suis également en essayant d'importer le fichier CSV seulement où la colonne b n'est pas nulle en ajoutant ce petit supplément de code:
Import-Csv -Delimiter "," -Header @("a","b","c") -Path $testCSV | Select a,b | where b -notmatch $null
J'ai besoin de le faire pour accélérer le script comme il y a des dizaines de milliers de lignes où la colonne b est nul et je n'ai pas besoin pour l'importation de ces lignes.
Toutefois, le code ci-dessus ne renvoie pas de données, soit en ce sens le code doit être tort, ou qu'il pense que le champ b n'est pas nul. Un exemple de 2 lignes du fichier texte est:
1,2,3
x,,z
Et je veux seulement les ligne(s) où la deuxième colonne est occupé.
J'espère que je vous ai expliqué que bien et encore une fois, toute aide est appréciée.
*******************RÉPONSE********************
Import-Csv -Delimiter "," -Header @("a","b","c") -Path $testCSV | Select a,b | Where-Object { $_.b -ne '' }
Merci!
- Re: mise à jour. Import-Csv traite consécutives délimiteurs comme une chaîne vide, pas
$null
. Une chaîne vide,''
, n'est pas égal à$null
plus que0
est. Vous souhaitez utiliserWhere-Object { b -ne '' }
ouWhere-Object { b.Trim() -ne '' }
- Merci pour la réponse. J'ai eu un "CommandNotFoundException" erreur avec ce code tant qu'il ne reconnaît pas les "b". Cependant, elle n'a directement me conduire à la réponse......::
Where-Object { $_.b -ne '' }
- Oh, eh bien non. C'est ce que je reçois pour répondre à des questions avant de le café!
- Je prends pleinement de crédit! :p
Vous devez vous connecter pour publier un commentaire.
Manque d'en-têtes de colonne n'est pas un problème. L'applet de commande
Import-CSV
pouvez spécifier les en-têtes avec-Header
commutateur. En supposant que les données sont sauvegardées en tant que C:\temp\headerless.csv et contientDe l'importer au format CSV est trivial:
En sélectionnant simplement les colonnes
a
etb
n'est pas dur non plus:Pour commencer je tiens à préciser que vonPryz réponse est une superbe façon de traiter cette question. Je voulais juste mentionner sur ce que vous étiez en train de faire et pourquoi il n'a pas de travail.
Vous avez eu la bonne idée. Vous avez été fractionnement des données sur des virgules. Toutefois vous n'étiez pas le faire sur chaque ligne. Juste le fichier dans son ensemble qui a été la source de vos ennuis.
Qui permettrait de diviser chaque ligne individuellement et puis vous pourriez avoir renseigné les
$FirstColumn
variable.$split