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