首页 > 解决方案 > 从 tsv 文件中过滤唯一值

问题描述

我有一个包含四列的 tsv 文件。我很难隔离文件的第一列(UUID),所以我可以从每个元素中去掉“UUID=”,并从唯一值中过滤。

我在我的代码中做错了什么?我一直很想弄清楚这一点。先感谢您!

这是文件的链接,下面是我的代码。

https://drive.google.com/file/d/1mGaK3n3YCrzrwOgSo5QQZ62FXDKJ3nZ8/view?usp=sharing

require "csv"

log_file = CSV.foreach("output_file.tsv",{:col_sep => "\t", :headers => true}) do |row|

uuid = row["UUID"]
ip = row["IP"]
time = row["TIME"]
ua = row["UA"]

uuid = uuid.drop(1)
ip = ip.drop(1)
time = time.drop(1)
ua = ua.drop(1)

uuid = uuid.map { |element| 
element = element[5..-1]}

unique_logins = uuid.uniq

puts uuid.uniq.length

标签: rubycsv

解决方案


可能你有点困惑,认为它CSV.foreach读取了整列,但它实际上是逐行读取你的文件。这就是为什么不需要drop(1)

这是最小的代码,它从文件中收集 uuid 并打印这些 uuid 的数量,然后打印唯一 uuid 的数量

require "csv"

uuids = []

log_file = CSV.foreach("output_file.tsv",{:col_sep => "\t", :headers => true}) do |row|
  uuids << row["UUID"]
end

uuids = uuids.map { |element| element = element[5..-1]}

p uuids.length
unique_logins = uuids.uniq
p unique_logins.length

推荐阅读