Попробуйте это:
Get-Content test.txt | Foreach {($_ -split '\s+',4)[0..2]}
И если вы хотите, чтобы данные в этих колонках, напечатанных на одной и той же линии:
Get-Content test.txt | Foreach {"$(($_ -split '\s+',4)[0..2])"}
Обратите внимание, что для этого требуется PowerShell 2.0 для оператора -split
. Кроме того, ,4
сообщает оператору split о максимальном количестве разделяемых строк, но помните, что последняя строка всегда будет содержать все дополнения concat'd.
Для фиксированных колонн ширины, вот один подхода к ширине столбца, равной 7 ($ ш = 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}}
$ разреша будет содержать каждый столбец для всех строк. Чтобы установить максимальные столбцы, измените $c++ -lt 2
с 2 на что-то еще. Возможно, есть более элегантное решение, но сейчас нет времени, чтобы обдумать это. :-)
Спасибо, но это не работает. Я запускаю PowerShell 2 и пытаюсь извлечь первые два столбца из моего файла .dat с фиксированной шириной (текстовый файл) – atricapilla
Пример вырезания, на который вы ссылаетесь, использует разделитель пробелов и захватывает столбцы с 1 по 3. Если это не относится к ваше дело, можете ли вы указать, что ваши требования? Звучит как фиксированная ширина столбца вместо разделителя. Если да, то какова ширина столбца? –
Мои данные в текстовом файле с фиксированной шириной (пробелы между ними). Я изменил ваш код и получил следующее: Get-Content text.txt | Foreach {"$ ($ _. Split() [0..2])"}. Это приближает меня, но это создает дополнительные строки строк между строками. – atricapilla