3

ファイルから重複行を削除したいのですが、特定の正規表現に一致する重複行のみを削除し、他のすべての重複をファイルに残します。これが私が現在持っているものです:

unique_lines = File.readlines("Ops.Web.csproj").uniq do |line|    
  line[/^.*\sInclude=\".*\"\s\/\>$/]
end

File.open("Ops.Web.csproj", "w+") do |file|
  unique_lines.each do |line|
    file.puts line
  end
end

これにより、行が正しく重複排除されますが、正規表現に一致する行のみがファイルに追加されます。ファイル内の他のすべての行を変更せずに追加し直す必要があります。私はここで何か小さなものが欠けていることを知っています。アイデア?

4

1 に答える 1

4

これを試して:

lines = File.readlines("input.txt")
out = File.open("output.txt", "w+")
seen = {}

lines.each do |line|
  # check if we want this de-duplicated
  if line =~ /Include/
    if !seen[line]
      out.puts line
      seen[line] = true
    end
  else
    out.puts line
  end
end

out.close

デモ:

➜  12980122  cat input.txt
a
b
c
Include a
Include b
Include a
Include a
d
e
Include b
f
➜  12980122  ruby exec.rb
➜  12980122  cat output.txt
a
b
c
Include a
Include b
d
e
f
于 2012-10-19T18:28:19.167 に答える