파일을 정렬하되 줄 쌍을 함께 유지하세요.

파일을 정렬하되 줄 쌍을 함께 유지하세요.

다음과 같은 항목이 포함된 파일이 있습니다.

female,9,13,6.3152956461
female,12,12,5.4797699786
female,11,11,3.6421699174
female,9,14,4.5933365997
female,8,14,2.4181574607

등.

먼저 처음 두 열을 제외한 모든 열을 제거하고 쉼표 대신 공백으로 구분합니다. 하지만 궁극적으로 내 문제는 열 1을 기준으로 정렬한 다음 열 2를 기준으로 정렬해야 하지만 지정된 행의 쌍을 동일하게 유지해야 한다는 것입니다.

열 구분 기호를 전환하고 정렬하려면 sed를 사용해야 한다고 생각하지만 두 정렬 간에 행을 쌍으로 유지하는 방법을 모르겠습니다.

답변1

이게 네가 말하는거야?

$ sort -t, -k1,1 -k2,2n file
female,8,14,2.4181574607
female,9,13,6.3152956461
female,9,14,4.5933365997
female,11,11,3.6421699174
female,12,12,5.4797699786

이렇게 하면 ,첫 번째 필드의 -구분된 데이터가 알파벳순으로 정렬되고 두 번째 필드는 숫자순으로 정렬됩니다. 정렬 시 첫 번째 필드가 먼저 정렬에 사용됩니다. 첫 번째 필드가 동일한 레코드의 경우 두 번째 필드가 정렬에 사용됩니다.


그런 다음 마지막 몇 개의 열을 삭제하려면(또는 열 1과 2를 유지하십시오):

$ sort -t, -k1,1 -k2,2n file | cut -d, -f1,2
female,8
female,9
female,9
female,11
female,12

또한 해당 쉼표를 제거하십시오.

$ sort -t, -k1,1 -k2,2n file | cut -d, -f1,2 | tr ',' ' '
female 8
female 9
female 9
female 11
female 12

sort그러나 어떤 구분 기호를 사용할지 알 수 있으므로 정렬에는 이것이 필요하지 않습니다 .

답변2

이 시도:

awk 'BEGIN {FS=","} {print $1, $2}' file | sort -k1,1 -nk2,2

설명하다:

  1. 'BEGIN {FS=","} {print $1, $2}'- 필드 구분 기호를 ,(기본값은 공백)로 설정하고 첫 번째( $1) 및 두 번째( $2) 필드만 인쇄합니다.
  2. file- 아카이브합니다(대신 파이프를 사용할 수 있습니다:) cat file | awk etc...;
  3. sort -k1,1 -nk2,2-k1,1- 첫 번째 필드( ) 및 다음 으로 정렬 - 두 번째 필드를 숫자로 정렬( -nk2,2)

예를 좀 더 복잡하게 만들어 보겠습니다(실제로 첫 번째 필드는 동일합니다). 다음과 같은 다양한 입력 파일이 있다고 가정해 보겠습니다.

male,9,13,6.3152956461
female,12,12,5.4797699786
female,11,11,3.6421699174
male,9,14,4.5933365997
male,8,14,2.4181574607

출력은 다음과 같습니다:

male 8
male 9
male 9
female 11
female 12

이것이 당신에게 필요한 것입니까?

관련 정보