2016-04-12 4 views
1

次のスクリプトを書いて、ファイルの内容をいくつかの列に基づいてソートしました。Powershellを使用してファイルコンテンツをソートする際に、いくつかの行をスキップするにはどうすればいいですか?

$lines = Get-Content $inputFile 

foreach($line in $lines){ 
    if($line.startsWith('*') -or $line.startsWith('-')){ 
     continue 
    } 
    if(($line -eq $lines[0]) -or ($line -eq $lines[1]) -or ($line -eq $lines[2])){ 
     Sort-Object { $line.Substring(70,9) } | set-content $outputFile 
    } 
} 

入力ファイルの内容:

...header row... 
...header row... 
...header row... 
     4 
     2 
     1 
....trailor..... 

所望の出力:私の入力ファイルで

...header row... 
...header row... 
...header row... 
     1 
     2 
     3 
....trailor..... 

が、私は、ヘッダとトレーラなど緯度ラインとして最初の3行を持っています。ソート中にこれらの行をスキップしたい。私は上記のスクリプトを使用しようとしました。しかし、それらの行をスキップしているわけではありません。誰かが私のためにこれを修正できますか?

答えて

2

あなたは常に3最初と最後の1行をスキップしたい場合は、あなたもあなたのforeachループを採用することができます:

foreach ($line in $lines[3 .. ($lines.Count -2)]) 
{ 
    Write-Host $line 
} 

あなたforeachループは、今までにラインまで述べ要素に始まり、実行されます最後の行

編集:ここでは 私は新しい配列を作成し、ちょうどSort-Objectレット(エイリアスソート)を使用して、特定の行を並べ替え、最後にSet-Contentコマンドレットを使用して新しいコンテンツを設定するあなたの例のためのソリューション:

$lines = Get-Content $inputFile 
@($lines[0 .. 2], ($lines[3 .. ($lines.Count -2)] | Sort-Object -Descending), $lines[-1]) | Set-Content $outputFile 
+0

こんにちは..お返事ありがとうございます!私の場合はスキップしていますが、動作していないので、Sort-Objetでコマンドを与えてください。だから私はあなたのコマンドを試してみたいです – Madhusudan

+0

あなたは私たちに例を教えて、希望の出力を教えてください。そうでなければ、私はあなたを助けることができません。 –

+0

はい、私はあなたが望むものを正確に実行する2ライナーのソリューションを追加しました。 –

関連する問題