Powershell将来自不同文件的两列合并在一起,而不使用键字段

Powershell将来自不同文件的两列合并在一起,而不使用键字段,powershell,powershell-2.0,powershell-3.0,powershell-v6.0,Powershell,Powershell 2.0,Powershell 3.0,Powershell V6.0,我有2个csv文件,有file1.column1、file1.column2、file2.column1、file2.column2。我想把它放在下面 文件1: Column1, Column2 1,a 2,b 3,c 文件2: Column1, Column2 x, abc y, def z, ghi 我期望的结果是: 文件3: @PetSerAl是正确的,您似乎希望在行号上合并这些,即每行的索引。下面是一个自定义对象的人为示例,只需将$File1和$File2替换为导入Csv的输出即可:

我有2个csv文件,有file1.column1、file1.column2、file2.column1、file2.column2。我想把它放在下面

文件1:

Column1, Column2
1,a
2,b
3,c
文件2:

Column1, Column2
x, abc
y, def
z, ghi
我期望的结果是: 文件3:


@PetSerAl是正确的,您似乎希望在行号上合并这些,即每行的索引。下面是一个自定义对象的人为示例,只需将$File1和$File2替换为导入Csv的输出即可:

$File1 = @(
[PSCustomObject]@{
    Column1 = 1
    Column2 = "a"
}
[PSCustomObject]@{
    Column1 = 2
    Column2 = "b"
}
[PSCustomObject]@{
    Column1 = 3
    Column2 = "c"
}
)

$File2 = @(
    [PSCustomObject]@{
        Column1 = "x"
        Column2 = "abc"
    }
    [PSCustomObject]@{
        Column1 = "y"
        Column2 = "def"
    }
    [PSCustomObject]@{
        Column1 = "z"
        Column2 = "ghi"
    }
)

for ($i = 0; $i -lt $File1.Count; $i++ )
{
    [PSCustomObject]@{
        "File1.Column1" = $File1[$i].Column1
        "File2.Column2" = $File2[$i].Column2
    }
}

@PetSerAl是正确的,您似乎希望在行号上合并这些,即每行的索引。下面是一个自定义对象的人为示例,只需将$File1和$File2替换为导入Csv的输出即可:

$File1 = @(
[PSCustomObject]@{
    Column1 = 1
    Column2 = "a"
}
[PSCustomObject]@{
    Column1 = 2
    Column2 = "b"
}
[PSCustomObject]@{
    Column1 = 3
    Column2 = "c"
}
)

$File2 = @(
    [PSCustomObject]@{
        Column1 = "x"
        Column2 = "abc"
    }
    [PSCustomObject]@{
        Column1 = "y"
        Column2 = "def"
    }
    [PSCustomObject]@{
        Column1 = "z"
        Column2 = "ghi"
    }
)

for ($i = 0; $i -lt $File1.Count; $i++ )
{
    [PSCustomObject]@{
        "File1.Column1" = $File1[$i].Column1
        "File2.Column2" = $File2[$i].Column2
    }
}
其他方法:

#load files
$F1=import-csv "C:\temp\File1.txt"
$F2=import-csv "C:\temp\File2.txt"

#found max element count for 2 files
$Count=[System.Math]::Max($F1.Count, $F2.Count)

#print as you want
0..$Count | select @{N="File1.Column1"; E={$F1[$_].Column1}}, @{N="File2.Column2"; E={$F2[$_].Column2}}
其他方法:

#load files
$F1=import-csv "C:\temp\File1.txt"
$F2=import-csv "C:\temp\File2.txt"

#found max element count for 2 files
$Count=[System.Math]::Max($F1.Count, $F2.Count)

#print as you want
0..$Count | select @{N="File1.Column1"; E={$F1[$_].Column1}}, @{N="File2.Column2"; E={$F2[$_].Column2}}

那么,脚本应该如何决定哪一行与哪一行连接呢?按行号?如果是,则它是您的关键字段。So可能重复,脚本应该如何决定哪一行与哪一行连接?按行号?如果是,则它是您的关键字段。导入Csv的可能副本或从Csv传输到ConvertFrom的此处字符串对我来说似乎更容易/更短。完美。谢谢大家!@lotping上面的两个自定义对象是csv数据的替代对象。for循环就是我实际演示的。我只是希望那里有一些东西,这样OP就可以复制完整的脚本,并让它以-is.Import-Csv或此处的字符串的形式工作,从Csv到ConvertFrom对我来说似乎更容易/更短。完美。谢谢大家!@lotping上面的两个自定义对象是csv数据的替代对象。for循环就是我实际演示的。我只是希望那里有一些东西,这样OP就可以复制完整的脚本,让它按原样工作。