두 번째 조건은 먼저 두 필드를 모두 정렬하는 것입니다.

두 번째 조건은 먼저 두 필드를 모두 정렬하는 것입니다.

GNU 정렬을 사용하여 파일의 여러 열을 정렬하려고 합니다.

소스 파일 tmp/file.txt의 형식은 다음과 같습니다.

03A12345679   2014-09-30-00.00.01.00
  • "03" => 첫 번째 열
  • "A" => 필드 구분 기호
  • "12345679 " => 두 번째 열
  • "2014-09-30-00.00.01.00" => 기타 열(정렬되지 않음)

나는 다음 명령을 시도했습니다.

sort --field-separator="A" -k2,11 -k1,2 tmp/file.txt > tmp/file_out.txt

그리고:

  • --field-separator="A"=> 필드 구분 기호는 "A"입니다.
  • -k2,11=> 두 번째 열은 첫 번째 정렬입니다("12345679").
  • -k1,2=> 첫 번째 열은 두 번째 정렬("03")입니다.

그러나 결과가 잘못 정렬되었습니다("03"이 "01" 및 "02" 행 앞에 옴).

03A12345679   2014-09-30-00.00.01.000000-0000
01A12345679   12345679  132132155VDVLDLV
02A12345679   FONDSEURO   000012664,120000000M
02A12345679   FR09999956570000009999,999990000F
01A12345680   472958519598601200000000047295824
02A12345680   122121EUR     0000099999,370000000M

나는 다음과 같은 결과를 원합니다 :

01A12345679   12345679  132132155VDVLDLV
02A12345679   FONDSEURO   000012664,120000000M
02A12345679   FR09999956570000009999,999990000F
03A12345679   2014-09-30-00.00.01.000000-0000
01A12345680   472958519598601200000000047295824
02A12345680   122121EUR     0000099999,370000000M

어떻게 해야 하나요?

답변1

필드 위치와 캐릭터 위치를 혼동하신 것 같습니다. GNU 정렬을 사용하면 공백으로 A구분된 첫 번째 필드에서 일련의 문자를 정렬할 수 있습니다.

$ sort -k1.4,1.11 -k1.1,1.2 file
01A12345679   12345679  132132155VDVLDLV
02A12345679   FONDSEURO   000012664,120000000M
02A12345679   FR09999956570000009999,999990000F
03A12345679   2014-09-30-00.00.01.000000-0000
01A12345680   472958519598601200000000047295824
02A12345680   122121EUR     0000099999,370000000M

답변2

다음을 사용하여 정렬 -g(일반 수치 비교 기준):

sort --field-separator="A" -g -k2,11 -k1,2 tmp/file.txt > tmp/file_out.txt

관련 정보