【问题标题】:Split CSV-File by distinct UserId to seperate file按不同的 UserId 将 CSV 文件拆分为单独的文件
【发布时间】:2020-03-23 23:07:34
【问题描述】:

我正在尝试按用户 ID 拆分 csv 文件

UserId;FirstName;LastName;Start;End;Type;BreakInMinutes;DateOfCreation;DateOfUpdate
1206;Viktoria;Jechsmayr;2017-10-04 08:15:00.000;2017-10-04 16:15:00.000;work;30;04.10.2017 16:07;05.10.2017 12:31
1205;Brigitte;Jechsmayr;2017-10-05 12:15:00.000;2017-10-05 16:15:00.000;work;0;05.10.2017 12:32;05.10.2017 16:15
1207;Lisa;Jechsmayr;2017-10-06 08:40:00.000;2017-10-06 12:00:00.000;work;0;05.10.2017 15:51;06.10.2017 08:42
1206;Viktoria;Jechsmayr;2017-10-09 08:25:00.000;2017-10-09 16:35:00.000;work;30;09.10.2017 08:23;09.10.2017 16:34
1204;Karl;Jechsmayr;2017-10-11 08:15:00.000;2017-10-11 16:30:00.000;work;60;11.10.2017 08:24;11.10.2017 16:14
1204;Karl;Jechsmayr;2017-10-12 12:30:00.000;2017-10-12 16:45:00.000;work;0;12.10.2017 12:39;12.10.2017 16:43
1205;Brigitte;Jechsmayr;2017-10-13 08:10:00.000;2017-10-13 12:25:00.000;work;0;13.10.2017 08:13;16.10.2017 07:41
1207;Lisa;Jechsmayr;2017-10-16 07:30:00.000;2017-10-16 17:05:00.000;work;30;16.10.2017 07:41;16.10.2017 17:05

我正在尝试按 UserId-Column(1400 个不同的用户 ID)拆分文件(>750.000 行)。 一个 UserId 的所有数据集都应该被移动/复制到一个单独的 csv 文件,名为 UserId_LastName-FirstName.csv

我不知道该怎么做。我在 Windows 10 电脑上工作。 我已经尝试了在 stackoverflow/google 上找到的各种脚本。似乎不起作用: export 生成一个没有名称和 0KB 大小的“.csv”(空) 或者它什么都不做。

我试过了:

Import-Csv file.csv | Group-Object -Property "UserId" | 
    Foreach-Object {$path=$_.name+".csv" ; $_.group | 
    Export-Csv -Path $path -NoTypeInformation}

生成:文件内容与 Origin 相同,但在每行的开头和结尾都带有“”,文件名 .csv(只是扩展名,没有名称)

awk -F',' 'UserId==NR{a[$1]++;next} a[$1]==1'  file.csv file.csv

输出:无 - 无文件无错误

还有一些其他的——我再也找不到了——抱歉。

感谢您的帮助。

【问题讨论】:

  • “似乎不起作用......” - 以哪种方式?错误?结果部分正确?电脑着火了? :) 请记住,我们看不到您的屏幕
  • 我尝试的脚本“生成”一个没有名称的空 (0KB) 文件,或者它什么都不做。
  • 请发布您正在使用/尝试的脚本,以及错误结果
  • 请发布来自Import-Csv file.csv | Select -First 2 的输出,以便我们检查导入是否正确。也许是分隔符的问题。
  • @robdy Please post output from Import-Csv file.csv | Select -First 2 的输出如上所示。所以导入是正确的

标签: windows powershell csv awk scripting


【解决方案1】:

您与Group-Object 关系密切。这应该适合你。

Import-Csv -Path 'D:\file.csv' -Delimiter ';' | Group-Object UserId | ForEach-Object {
    $firstName = $_.Group.FirstName | Select-Object -First 1
    $lastName  = $_.Group.LastName  | Select-Object -First 1
    $fileOut   = 'D:\test\{0}_{1}.csv' -f $lastName, $firstName
    $_.Group | Export-Csv -Path $fileOut -NoTypeInformation
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-17
    • 2018-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-06
    相关资源
    最近更新 更多