파일을 정렬하려고 합니다.
TX001;A0004|Number|5|0|Y|1
TX001;A0110|VARCHAR|5|0|Y|4
TX001;A1332|VARCHAR|15|0|Y|3
TX001;B3321|VARCHAR|15|0|Y|5
TX001;C1321|VARCHAR|15|0|Y|2
TY001;A1234|Number|5|0|Y|3
TY001;C2335|VARCHAR|5|0|Y|1
TY001;B2133|VARCHAR|15|0|Y|2
TZ001;A1234|Number|5|0|Y|3
TZ001;A2133|VARCHAR|5|0|Y|1
TZ001;C0133|VARCHAR|15|0|Y|2
예상되는 출력은 다음과 같습니다.
TX001;A0004|Number|5|0|Y|1
TX001;C1321|VARCHAR|15|0|Y|2
TX001;A1332|VARCHAR|15|0|Y|3
TX001;A0110|VARCHAR|5|0|Y|4
TX001;B3321|VARCHAR|15|0|Y|5
TY001;C2335|VARCHAR|5|0|Y|1
TY001;B2133|VARCHAR|15|0|Y|2
TY001;A1234|Number|5|0|Y|3
TZ001;A2133|VARCHAR|5|0|Y|1
TZ001;C0133|VARCHAR|15|0|Y|2
TZ001;A1234|Number|5|0|Y|3
마지막 숫자 열을 기준으로 정렬해야 합니다. sort 를 사용하려고 하면 -n
첫 번째 열의 순서가 변경됩니다.
을 사용해 보았지만 sort -t "|" -k 6,6n FNAM.txt
숫자 정렬로 인해 첫 번째 열 순서가 변경되었습니다.
테이블 이름의 첫 번째 열은 영향을 받지 않은 상태로 유지하면서 마지막 열을 기준으로 숫자순으로 정렬해야 합니다.
답변1
답변2
sort
다양한 유형의 여러 열을 정렬하는 것이 가능하지만 구분 기호는 단일 문자여야 합니다. 예제를 처리하고 예상되는 출력을 생성하려면 첫 번째 ';'를 '|'로 바꾸고 첫 번째 열을 숫자순으로 정렬한 다음(이전의 여섯 번째 열) 마지막으로 첫 번째 '|' ';':
sed 's/;/|/' < FNAM.txt | sort -t\| -k1,1 -k7,7n | sed 's/|/;/'
당신이 시도한 변형,
sort -t "|" -k 6,6n FNAM.txt
전체 파일을 여섯 번째 열에서만 숫자로 정렬합니다. sort
사용자가 알려주지 않은 구조를 모르므로 처음 몇 문자로 줄을 그룹화해야 한다는 것을 알지 못합니다. 따라서 마지막 열이 완전히 정렬되어 결과적으로 테이블 이름이 혼합됩니다.