如何从Ruby中的多个文件中删除重复的值或单词

时间:2018-02-13 13:52:21

标签: ruby

我在目录中有多个文件,它们有重复的记录。对于相同的值,可以有多个副本。

sample.txt的

#My first file created on Tuesday
[active]
row = org\xcfte, org\hrxen
speed = org\hrxen, org\kiopm7, org\0987hy
col = org\lop09k, org\0987hy

sample_2.txt

#My second file created on Wednesday
[active]
row = org\xcfte, org\0okilh
speed = org\hrxen, org\0okilh
col =  org\0987hy

等多个文件

预期输出

sample:
org\xcfte
org\hrxen
org\kiopm7
org\0987hy
org\lop09k

sample_2:
org\xcfte
org\0okilh
org\hrxen
org\0987hy

从第一个文件 - org \ hrxen和org \ 0987hy应该只出现一次,从第二个文件'org \ 0okilh'出现一次。

我试过

lines = File.read('/path/to/file')
lines.split("\n").uniq.join("\n")

以及

File.readlines("*.txt").uniq

但不会删除重复的条目

1 个答案:

答案 0 :(得分:1)

我已经尝试了最后一个File.readlines("file.txt").uniq并且它在这种文件中工作得非常好:

file.txt的

org\xcfte
org\hrxen
org\hrxen
org\kiopm7
org\0987hy
org\0987hy
org\lop09k

此处的工作是正确解析您的文件,因为在此类文件上执行File.readlines("file.txt").uniq ...

[active]
row = org\xcfte, org\0okilh
speed = org\hrxen, org\0okilh
col =  org\0987hy

...永远不会打印您的预期输出

修改这是一个适合我的解决方案

array = []

file = File.read('file')
file.split(' ').each do |line|
    # I push the line if it is not already inside the array and if it contains the substring "org"
    formated = line.gsub(',', '')
    array.push(formated) unless array.include? formated or !line.include? "org"
end
puts array

样本1的输出:

org\xcfte
org\hrxen
org\kiopm7
org\0987hy
org\lop09k