Spróbuj tego:
Get-Content test.txt | Foreach {($_ -split '\s+',4)[0..2]}
A jeśli chcesz dane w tych kolumnach drukowane na tej samej linii:
Get-Content test.txt | Foreach {"$(($_ -split '\s+',4)[0..2])"}
pamiętać, że wymaga to PowerShell 2.0 dla operatora -split
. Ponadto, ,4
informuje operatora podziału maksymalną liczbę rozszczepionych łańcuchów, ale pamiętaj, że ostatni ciąg będzie zawsze zawierał wszystkie dodatki połączone.
Dla stałych kolumn szerokości, oto jedno podejście do szerokości kolumny równej 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 będzie zawierać każdą kolumnę dla wszystkich wierszy. Aby ustawić maks. Kolumny zmień $c++ -lt 2
z 2 na coś innego. Prawdopodobnie istnieje bardziej eleganckie rozwiązanie, ale nie mamy teraz czasu, aby to rozważyć. :-)
Dzięki, ale to nie działa. Używam programu PowerShell 2 i próbuję wyodrębnić pierwsze dwie kolumny z pliku .dat o stałej szerokości. (Plik tekstowy). – atricapilla
Ten przykład wycięcia, do którego prowadzi łącze, używa ogranicznika przestrzeni i przechwytuje kolumny od 1 do 3. Jeśli to nie dotyczy Twoja sprawa, czy możesz podać swoje wymagania? Brzmi jak stała szerokość kolumny zamiast ograniczonej. Jeśli tak, jaka jest szerokość kolumny? –
Moje dane są w pliku tekstowym o stałej szerokości (odstępy między). Zmodyfikowałem twój kod i otrzymałem: Get-Content text.txt | Foreach {"$ ($ _. Split() [0..2])"}. To sprawia, że jestem dość blisko, ale generuje to dodatkowe rzędy między wierszami. – atricapilla