Linux 사전에서 파일을 수평으로 정렬

Linux 사전에서 파일을 수평으로 정렬

여러 행과 열이 있는 아래와 같은 파일이 있습니다.

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 @F0번째 요소를 잘라낸 다음(정렬에서 제외) sort @F나머지 요소를 기본적으로 사전순으로 정렬합니다. join " ", ...결과를 함께 연결 하고 공백 문자로 구분합니다.

생각하다sort기본적으로 Perl은 사용자의 로케일을 무시하므로 LC_COLLATE=C무료로 얻을 수 있습니다.

관련 정보