Aqui está uma solução de rubi. É um "bit" mais longo, mas também funciona quando os IDs estão em uma ordem diferente do arquivo de usuários. (E é um pouco mais sustentável do que o sed)
#!/usr/bin/env ruby
ids = []
users = {}
header = ""
# Read the contents of the user-file into a Hash
File.open('users.csv','r') do |users_file|
header = users_file.gets
users_file.each do |line|
id, *content = line.chomp.split(',')
users[id] = content
end
end
# For each line in the id-file, add an appropriate line to the removed-file.
File.open('ids.txt','r') do |ids_file|
File.open('removed.csv', 'a') do |removed_file|
removed_file.puts header
ids_file.each do |line|
id = line.chomp
if users[id]
removed_file.puts "#{id},#{users[id].join(',')}"
users.delete id
end
end
end
end
# Finally fill the original file with what's left
File.open('original.csv', 'a') do |original_file|
original_file.puts header
users.each_pair do |id, line|
original_file.puts "#{id},#{line.join(',')}"
end
end
Sua saída estará nos arquivos "original.csv" e "removed.csv". Se não é onde você imaginou, apenas mova os arquivos;)