我有两个CSV:
*beta.csv:多个NPC有多个物品(某些物品当前无效)
NPC,Item
NPC 1,Item 1
NPC 1,Item 2
NPC 2,Item 1
NPC 2,Item 3
NPC 3,Item 2
NPC 4,Item 1
NPC 4,Item 4
NPC 4,Item 5
字符串
*live.csv:当前有效项目的列表:
Item
Item 1
Item 3
Item 5
型
由于live.csv中不存在项目2和项目4,因此我希望删除beta.csv中包含这些项目的任何行。
我希望结果CSV看起来像这样:
NPC,Item
NPC 1,Item 1
NPC 2,Item 1
NPC 2,Item 3
NPC 4,Item 1
NPC 4,Item 5
型
我真的不知道我应该如何继续在这里,因为我不习惯于差分文件,所以任何帮助将是最受欢迎的!
谢谢你的时间:)
2条答案
按热度按时间1rhkuytd1#
我看到了类似于 * list suppression * 的内容:如果A中的某些行在B中不存在,则需要从A中删除它们。
在处理CSV文件时,使用真正的CSV解析器将使结果更加可靠。您可以用Python编写一个非常小的程序来实现这一点,或者您可以使用支持CSV的命令行工具,如GoCSV及其join子命令。
联接”根据列中元素的相等性,使用内部(默认)、左、右或外部联接来联接两个CSV。
在您的示例中,只有在两个文件中都存在Item时,默认的内部联接才会保留行。由于live是beta的一个子集,因此在确定要包括beta中的哪些行时,live将成为限制因素:
字符串
Join * 将CSV压缩在一起(除了连接逻辑之外),所以我们得到所有三列。
可以使用select子命令("extract specified columns")来修剪,join的输出可以 * piped * 到select:
型
对于join,我们通过名称指定了"Item"列,因为它由两个文件共享。对于select,我们只需要指定第一列和第二列(
1,2
),因为名称"Item"是重复的。只需重定向它以获得最终文件,在下面的示例中称为output.csv:
型
insrf1ej2#
可以在Miller中运行join
字符串
有
型