Чтобы вывести строку, в которой Header_2 никогда не содержит записи из всех значений Header_1, вы можете сделать следующее:
Windows PowerShell:
$data = Import-Csv file.csv -Delimiter "`t"
($data | where Header_1 -notin $data.Header_2 |
ConvertTo-Csv -NoType -Delimiter "`t") -replace '^"|"$|"(\t)"','$1' |
Set-Content file.csv
PowerShell 7:
$data = Import-Csv file.csv -Delimiter "`t"
$data | where Header_1 -notin $data.Header_2 |
Export-Csv -NoType -Delimiter "`t" -UseQuotes AsNeeded
Мне кажется, что вы хотите сделать, это вывести строки, в которых Header_2 еще не появился как значение Header_1, что означает, что вы игнорируете будущий Header_1 значения.
$list = [system.collections.generic.list[string]]@()
(Import-Csv file.csv -delimiter "`t" | Foreach-Object {
$list.Add($_.Header_1)
if ($_.Header_2 -notin $list) {
$_
}
} | ConvertTo-Csv -NoType -Delimiter "`t") -replace '^"|"$|"(\t)"','$1' |
Set-Content file.csv
Вы можете go маршрут без использования команд *-Csv
, и тогда вам не придется иметь дело с соответствующим текстом для неосновных версий PowerShell.
$list = [system.collections.generic.list[string]]@()
Get-Content file.csv | Foreach-Object {
$h1,$h2 = $_ -split '\t'
$list.Add($h1)
if ($h2 -notin $list) {
$_
}
} | Set-Content file.csv