基于列值拆分CSV文件的最简单方法

时间:2014-06-13 00:43:40

标签: excel csv ms-office openoffice-calc

我有一份世界上每个城市的大量名单,我试图按国家划分。手动实现这一点非常繁琐,因此相信有更好的方法来实现这一目标。这让我想到了以下问题。

根据一列中的相似值将CSV文件拆分为较小的CSV文件的最简单/最佳方法是什么?

我已经看到这个问题以一些不同的方式回答,假设有人询问有C ++经验,我不这样做。我对Java有基本的了解,对Linux有更多的经验,对Windows和Microsoft Office也有更多的经验。

任何正确方向的推动都是有帮助的。

感谢您花时间阅读这篇文章。任何和所有的帮助表示赞赏。

3 个答案:

答案 0 :(得分:4)

显然有许多不同的方法可以实现这一目标 - 如果你在Windows上,this snippet为PowerShell提供了一个很好的单线程,可以根据列中的值拆分csv文件: / p>

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

file.csv替换为您的csv文件,将"department"替换为您想要拆分文件的列标题。它将根据所选列中的每个唯一值编写一个新的csv。

如果你从未使用过Powershell,here是一个不错的介绍。

答案 1 :(得分:1)

正如您手动操作一样,我假设您不一定需要代码才能实现此目的。我对Powershell不熟悉,所以无法评论chrisb的答案。如果你可以使它工作,看起来它比我的解决方案简单,但如果你不能,那么你可以尝试以下:

  • 在excel中打开您的csv文件
  • 如果尚未存在,则在顶行插入标题行
  • 在菜单中转到数据并单击过滤器。您会在所有标题中看到漏斗图标。
  • 在国家/地区标题中,选择您要获取其记录的国家/地区。您将看到仅过滤所选国家/地区的城市。
  • 将已过滤的列复制到另一个Excel工作表中,并另存为CSV文件。
  • 对所有国家/地区重复此过程。

如果你想进一步自动化,那么你可能需要进行一些编码。

答案 2 :(得分:0)

在Linux或macOS上,您可以使用awk(其中2是要拆分的列索引):

awk -F ',' '{print > ("cities-in-"$2".csv")}' cities.csv

输入文件

city.csv:

1,london,uk
2,paris,france
3,bristol,uk
4,lyon,france

输出文件

city-in-uk.csv:

1,london,uk
3,bristol,uk

city-data-paris.csv:

2,paris,france
4,lyon,france
相关问题