/etc/passwd 파일 uid로 소팅하기..에서..더 좋은 코드 없을까요? 흠..

36 vistas
Ir al primer mensaje no leído

niceguy oh

no leída,
23 ene 2015, 12:07:10 a.m.23/1/15
para rub...@googlegroups.com
제가 함 작성해봤습니다...
리눅스 명령어로는 간단한데요..


#!/usr/bin/env ruby
p="/etc/passwd"
i=0
sort_by_uid=[]
p_array=File.readlines(p)
while i < p_array.size
  # Getting array for each users
  get_each=p_array[i].split(/:/)
  # Getting uid for each users
  uid=get_each[2]
  # Getting user for each users
  rest = get_each[0]+":"+get_each[1]+":"+get_each[2]+":"+get_each[3]+":"+get_each[4]+":"+get_each[5]+":"+get_each[6]
  sort_by_uid << uid +":"+ rest
  i += 1
end

 
  # to sort must convert to to_i integer
  sort_by_uid=sort_by_uid.sort_by { |k,s| k.to_i }
  puts "Soting passwd file by uid number"
  puts sort_by_uid

더 간단한 방법 없을까요? 흠..^^;
루비 초심자입니다.

neofeel

no leída,
23 ene 2015, 1:40:22 a.m.23/1/15
para rub...@googlegroups.com
코드를 재작성 해봤습니다.

sort_by_uid = File.readlines('/etc/passwd').map do |line|
  tokens = line.chomp.split(':')
  uid = tokens[2]
  uid ? [uid, tokens[0..6]].flatten : nil
end.compact.sort_by { |uid, | uid.to_i }.map { |e| e.join(':') }


rest 값을 재조립하지 않고 입력값을 재사용하는 버전

sort_by_uid = File.readlines('/etc/passwd').map do |line|
  uid = line.split(':')[2]
  uid ? [uid, line.chomp] : nil
end.compact.sort_by { |uid, | uid.to_i }.map { |e| e.join(':') }




2015년 1월 23일 금요일 오후 2시 7분 10초 UTC+9, niceguy oh 님의 말:

Park Ji-In

no leída,
23 ene 2015, 1:47:10 a.m.23/1/15
para rub...@googlegroups.com
이건 어떻습니까. 중간에 오류가 없다면 괜찮을겁니다. 
puts File.readlines("/etc/passwd").sort_by {|line| line1.split(/:/)[2].to_i}


--

---
이 메일은 Google 그룹스 '한국 루비 사용자 모임' 그룹에 가입한 분들에게 전송되는 메시지입니다.
이 그룹에서 탈퇴하고 더 이상 이메일을 받지 않으려면 rubykr+un...@googlegroups.com에 이메일을 보내세요.
http://groups.google.com/group/rubykr에서 이 그룹을 방문하세요.
더 많은 옵션을 보려면 https://groups.google.com/d/optout을(를) 방문하세요.

Responder a todos
Responder al autor
Reenviar
Se borró el mensaje
0 mensajes nuevos