2014-11-28 2 views
0

강사는 우리에게 코드 주었다은 일종의 -k 리눅스는

sort -k 3.7nbr -k 3.1nbr -k 3.4nbr distros.txt > distros-by-date.txt 

코드가 작동한다고 가정하면 날짜

Fedora:10:11/25/2008 
SUSE:11.0:06/19/2008 
Ubuntu:8.04:04/24/2008 
Fedora:8:11/08/2007 
SUSE:10.3:10/04/2007 
Ubuntu:6.10:10/26/2006 
Fedora:7:05/31/2007 
Ubuntu:7.10:10/18/2007 
Ubuntu:7.04:04/19/2007 
SUSE:10.1:05/11/2006 
Fedora:6:10/24/2006 
Fedora:9:05/13/2008 
Ubuntu:6.06:06/01/2006 
Ubuntu:8.10:10/30/2008 
Fedora:5:03/20/2006 

하여이 distros.txt 파일을 정렬 할 예정이다, 이것은 가정된다

Fedora 10 
Ubuntu 8.10 
SUSE 11.0 
Fedora 9 
Ubuntu 8.04 
Fedora 8 
Ubuntu 7.10 
SUSE 10.3 
Fedora 7 
Ubuntu 7.04 

일이되는 출력의 버전를 단순화 할, 그렇지 않습니다 문제가 무엇인지 찾아내는 데 어려움이 있습니다. 나는 그것에 대해 읽었지만 예제는 단지 n, 어떤 것에 대해서 br을 사용합니까? 때로는 -k와 키 사이에 공백이있는 경우가 있습니다. 마지막으로 때로는 쉼표 (3, 7)가 아닌 키 (3.7) 사이에 점을 찍는 경우가 있습니다. 맨 페이지를 읽으려고했는데, 내 머리를 감쌀 수 없다. 누군가 설명해 줄 수 있니?

이 문제가 발생하면 가끔 그는 Mac을 사용하고 코드에 문제가 생깁니다. 아마도 OS입니까?

답변

0

당신은 그것을 콜론 사용해야 sort에게 더 필드 분리 사양이 없습니다 : 단순화 된 출력을 얻기 위해,

sort -t: -k 3.7nbr -k 3.1nbr -k 3.4nbr 

를, 당신은 다음과 같은 성적에 따라, 열 하나, 둘 만하면됩니다 :

플래그의 관점에서
$ sort -t: -k 3.7nbr -k 3.1nbr -k 3.4nbr inputfile | awk -F: '{print $1" "$2}' 
Fedora 10 
Ubuntu 8.10 
SUSE 11.0 
Fedora 9 
Ubuntu 8.04 
Fedora 8 
Ubuntu 7.10 
SUSE 10.3 
Fedora 7 
Ubuntu 7.04 
Ubuntu 6.10 
Fedora 6 
Ubuntu 6.06 
SUSE 10.1 
Fedora 5 

n 숫자 비교, b 수단은 선행 공백 및 r (아마도 12/ 4/2022 같은 경우를 포함하는)을 무시 수단 역순 (가장 빠름).

0

필드 구분 기호를 :으로 설정하는 옵션 -t:이 누락되었습니다. 또한 -k 3.4nbr은 중복되지만 상처를주지는 않습니다. man 페이지의 말씀

에 대한 -k :

KEYDEF는 F는 [.C] [OPTS]를 시작을 [F는 [.C] [] OPTS]와 위치, F는 필드가 중지입니다 숫자 및 C 필드의 문자 위치; 둘 다 원점 1이고 정지 위치의 기본값은 선의 끝입니다.

그 의미 :

주요 사양 필드 번호 (F) 선택적으로 ([...]) 뒤에 마침표와 문자 (.C)를 오프셋 및 선택 옵션으로 구성 (-k 다음에 일을) 문자 [OPTS])이며 두 번째 필드 번호와 선택적 문자 오프셋이 따라 올 수 있습니다.

문자 오프셋이 누락 된 경우 키는 필드의 첫 번째 문자로 시작됩니다.

첫 번째 필드 번호/문자 오프셋은 필드의 시작을 정의합니다. 두 번째가있는 경우 F.C, 필드의 끝을 정의합니다. 그렇지 않으면 필드가 줄 끝으로 이동합니다.

+0

@paxdiablo :'-k 3.1nbr '키는 줄 끝까지 확장됩니다. – rici

관련 문제