2013-10-31 2 views
1

나는 this text file이 있다고합니다. 나는 그들 안에 영화가있는 줄을 잡고, 제목과 일치시키고, 인쇄하고, 제목을 기준으로 정렬하고 싶었습니다. 나는 대부분의 방법을 가지고있다 :명령 줄에서 텍스트 파일의 일부분 정렬

File.open("features/sort_movie_list.feature","r").each {|line| puts [$1] if line =~ /\|\s+([A-Z0-9][a-zA-Z0-9: ]+)\s+\|/} 

그러나 나는 거기에서 정렬하는 방법을 몰랐다. 나는 grep와 방법의 일부를 가지고 :

egrep -o "\|\s([A-Z0-9][A-Za-z0-9: ]+)\s+\|" sort_movie_list.feature 

하지만 괄호 경기 만 인쇄하는 방법을 잘하지 않았다. 출력이 아래와 같이되도록 어떻게 할 것입니까?

2001: A Space Odyssey 

Aladdin 

Amelie 

Chicken Run 

... 

답변

1

루비 예제에서는 배열에 넣고 배열을 정렬하여 인쇄 할 수 있습니다. 당신이 파이프 결과를 정렬 할 수 egrep을 가진

는 :

egrep -o "\|\s([A-Z0-9][A-Za-z0-9: ]+)\s+\|" sort_movie_list.feature | sort 
+0

아 맞습니다. 정렬을 사용하여 올바르게 정렬하려면 egrep을 사용하여 제목을 추출 할 필요가 없습니다. 감사. – magician11

0

좋아, 지금은 루비를 알아 냈어요. 배열을 사용할 것을 제안한 데이비드에게 감사드립니다.

movie_titles = [] 
File.open("features/sort_movie_list.feature","r").each {|line| movie_titles.push($1.strip) if line =~ /\|\s+([A-Z0-9][a-zA-Z0-9: ]+)\s+\|/} 
puts movie_titles.sort 

누군가가보다 효율적이고 간결한 대답을 갖고 있다면, 나는 더 많은 것을 배우기 위해 항상 열려 있습니다.

1

쉼표 (','), 점 ('.') 또는 기타 이상한 물건 (예 : 독일어 Umlauts 'ä', 느낌표 ("Mars Attacks!"!!))이있는 정규 표현식은 내부에서 .

따라서 주어진 형식을 악용하여 파이프가 영화 제목 목록에 나타나지 않아야한다고 가정합니다.

따라서, 파이프 ("|")이 부분에서 파일, 컷 중 하나를 필드 구분 기호와 같이, 두 번째 필드를 선택 :

grep "|" movies.txt | cut -f 2 -d"|" | sort 

합니다 (grep "|" 영화없이 라인을 생략하는 것입니다, 그렇지 않으면 cut -f 2 -d "|" movies.txt).

또는 루비의

은 라인을 따라 두 경우 모두 당신이 나중에 공백을 제거 얻을 수

line.split("|")[1] 

참고 무언가를 사용합니다.

+0

네, 고마워요! http://pastebin.com/TvJQDXSm – magician11

+0

두 번째 "열"이 고정 길이 인 것처럼 입력 파일을 다시 보면 ** 범위 내에서 문자를 가져 오는 것이 ** 더 좋을 수도 있습니다. 이렇게하면 제목에 파이프 기호가있는 영화를 캡처 할 수도 있습니다. – Felix

관련 문제