ヘッダーのないCSVとしてフォーマットされたログファイルがあります。最初の列は基本的に、記録されている問題の一意の識別子です。同じ問題IDに対して、詳細が異なる複数の行が存在する場合があります。現時点では他のデータは必要ないため、最初の列が重複している行を削除したいと思います。
私はこの時点でPowerShellのかなり基本的な知識を持っているので、私が見逃している単純なものがあると確信しています。
これが重複している場合は申し訳ありませんが、質問の一部に回答するための質問を見つけることができましたが、質問全体ではありませんでした。
これまでのところ、私の最善の推測は次のとおりです。
Import-Csv $outFile | % { Select-Object -Index 1 -Unique } | Out-File $outFile -Append
しかし、これは私にエラーを与えます:
Import-Csv:メンバー「LB」はすでに存在します。 C:\ Users\jnurczyk\Desktop\Scratch\POImport\getPOImport.ps1:6 char:1 + Import-Csv $ outFile | %{Select-Object -InputObject $ _ -Index 1 -Unique} | Out ... + ~~~~~~~~~~~~~~~~~~~ + CategoryInfo:NotSpecified :( :) [Import-Csv]、ExtendedTypeSystemException + FullyQualifiedErrorId:AlreadyPresentPSMemberInfoInternalCollectionAdd、Microsoft.PowerShell.Commands。 ImportCsvCommand
データにはヘッダーがないため、Import-Csv
コマンドレットでヘッダーを指定する必要があります。次に、最初の列を使用して一意のレコードのみを選択するには、Select-Object
コマンドレットでそれを指定する必要があります。以下のコードを参照してください。
Import-Csv $outFile -Header A,B,C | Select-Object -Unique A
明確にするために、私の例のヘッダーはA、B、およびCです。これは、列の数がわかっている場合に機能します。ヘッダーが少なすぎると、列が削除されます。ヘッダーが多すぎると、それらは空のフィールドになります。
この問題の解決策を探すたびに、このスレッドに出くわします。ただし、ここで受け入れられるソリューションは、私が望むより一般的なものです。以下の関数は、同じヘッダー名(A、B、C、A1 D、A2、C1など)が表示されるたびにインクリメントします。
Function Import-CSVCustom ($csvTemp) {
$StreamReader = New-Object System.IO.StreamReader -Arg $csvTemp
[array]$Headers = $StreamReader.ReadLine() -Split "," | % { "$_".Trim() } | ? { $_ }
$StreamReader.Close()
$a=@{}; $Headers = $headers|%{
if($a.$_.count) {"$_$($a.$_.count)"} else {$_}
$a.$_ += @($_)
}
Import-Csv $csvTemp -Header $Headers
}
展開するために Benjamin Hubbard'spost ここに小さなSQLスクリプトがあります(もちろん、このデータをデータベースのテーブルに挿入すると仮定します!)私は作成に使用しますスクリプトのヘッダープロパティ:
SELECT
'-Header '
+ STUFF((SELECT
',' + QUOTENAME(COLUMN_NAME, '"')
+ CASE WHEN C.ORDINAL_POSITION % 5 = 0 THEN ' `' + CHAR(13) + CHAR(10) ELSE '' END
FROM
INFORMATION_SCHEMA.COLUMNS C
WHERE
TABLE_NAME = '<Staging Table Name>'
FOR XML PATH (''), type).value('.', 'nvarchar(max)'), 1, 1, '')