Essayez ceci:
Get-Content test.txt | Foreach {($_ -split '\s+',4)[0..2]}
Et si vous voulez que les données contenues dans ces colonnes imprimées sur la même ligne:
Get-Content test.txt | Foreach {"$(($_ -split '\s+',4)[0..2])"}
Notez que cela nécessite PowerShell 2.0 pour l'opérateur -split
. En outre, le ,4
indique à l'opérateur de fractionnement le nombre maximal de chaînes fractionnées que vous voulez mais gardez à l'esprit que la dernière chaîne contiendra toujours tous les extras concat'és.
Pour les colonnes de largeur fixe, voici une approche pour la largeur de colonne égale à 7 ($ w = 7):
$res = Get-Content test.txt | Foreach {
$i=0;$w=7;$c=0; `
while($i+$w -lt $_.length -and $c++ -lt 2) {
$_.Substring($i,$w);$i=$i+$w-1}}
$ res contiendront chaque colonne pour toutes les lignes. Pour définir les colonnes max, modifiez $c++ -lt 2
de 2 à autre chose. Il y a probablement une solution plus élégante, mais je n'ai pas le temps maintenant de la méditer. :-)
Merci, mais cela ne semble pas fonctionner. Je cours PowerShell 2 et essaie d'extraire les deux premières colonnes de mon fichier .dat à largeur fixe (fichier texte) – atricapilla
L'exemple de coupure que vous liez utilise un délimiteur d'espace et saisit les colonnes 1 à 3. Si cela ne s'applique pas à votre cas, pouvez-vous indiquer quelles sont vos exigences? Cela ressemble à une largeur de colonne fixe au lieu d'être délimitée. Si oui, quelle est la largeur de la colonne? –
Mes données sont dans un fichier texte de largeur fixe (espaces entre). J'ai modifié votre code et j'ai obtenu ceci: Get-Content text.txt | Foreach {"$ ($ _. Split() [0..2])"}. Cela me rapproche beaucoup, mais cela génère des rangs de rangs supplémentaires entre les lignes. – atricapilla