다음과 같은 항목이 포함된 파일이 있습니다.
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
설명하다:
'BEGIN {FS=","} {print $1, $2}'
- 필드 구분 기호를,
(기본값은 공백)로 설정하고 첫 번째($1
) 및 두 번째($2
) 필드만 인쇄합니다.file
- 아카이브합니다(대신 파이프를 사용할 수 있습니다:)cat file | awk etc...
;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
이것이 당신에게 필요한 것입니까?