여러 행과 열이 있는 아래와 같은 파일이 있습니다.
a x1.1 x1.2 x1.10 x1.11
파일의 열을 두 번째부터 사전순으로 정렬하고 싶습니다. 따라서 각 라인의 출력은 다음과 같아야 합니다.
a x1.1 x1.10 x1.11 x1.2
나는 사용했지만 LC_ALL=C sort /path_to_file/file
원하는 출력을 제공하지 않습니다. 예를 들어 여러 행의 경우
input
a x1.1 x1.2 x1.10 x1.11
b x1.2 x1.3 x1.10 x1.11
a x1.10 x1.20 x1.13 1.12
desired output
a x1.1 x1.10 x1.11 x1.2
b x1.10 x1.11 x1.2 x1.3
a x1.10 x1.12 x1.13 x1.20
getting output
a x1.1 x1.2 x1.10 x1.11
a x1.10 x1.20 x1.13 x1.12
b x1.2 x1.2 x1.10 x1.11
몇 가지 해결책을 제안해주세요.
답변1
Perl을 사용할 수 있습니다.
$ perl -alpe '$_ = join " ", shift @F, sort @F' input
a x1.1 x1.10 x1.11 x1.2
b x1.10 x1.11 x1.2 x1.3
a x1.10 x1.12 x1.13 x1.20
스크립트는 입력 라인을 반복합니다. -a
입력 행이 공백으로 인해 기본 배열로 분할됩니다 @F
. shift @F
0번째 요소를 잘라낸 다음(정렬에서 제외) sort @F
나머지 요소를 기본적으로 사전순으로 정렬합니다. join " ", ...
결과를 함께 연결 하고 공백 문자로 구분합니다.
나생각하다sort
기본적으로 Perl은 사용자의 로케일을 무시하므로 LC_COLLATE=C
무료로 얻을 수 있습니다.