‘정렬’ 명령은 Linux 프로그램으로, 입력 텍스트 파일의 줄을 인쇄하고 모든 파일을 정렬된 순서로 연결하는 데 사용됩니다. 정렬 명령은 공백을 필드 구분자로 사용하며, 전체 입력 파일을 정렬 키로 사용합니다. 중요한 점은 정렬 명령이 실제로 파일을 정렬하지 않고 출력을 정렬된 상태로만 인쇄한다는 것입니다. 출력을 리디렉션해야만 정렬된 결과를 얻을 수 있습니다.
이 글은 Linux ‘정렬’ 명령에 대한 깊은 이해를 목표로 하며, 리눅스에서 정렬 명령을 사용하는 방법을 보여주는 14가지 유용한 실제 예시를 제시합니다.
1. 지정된 내용으로 텍스트 파일 생성
먼저, 작업 디렉토리인 ‘/home/$USER/Desktop/tecmint’에 ‘tecmint.txt’라는 이름의 텍스트 파일을 생성합니다. 이 파일은 이 작업을 위해 ‘정렬’ 명령 예시를 실행하는 데 사용됩니다.
아래 명령의 ‘-e’ 옵션은 백슬래시의 해석을 가능하게 하며, ‘/n’은 ‘echo 명령’이 각 문자열을 새 줄에 작성하도록 지시합니다.
echo -e "computer\nmouse\nLAPTOP\ndata\nRedHat\nlaptop\ndebian\nlaptop" > tecmint.txt
2. 파일 내용 보기
‘정렬’ 명령을 시작하기 전에 파일의 내용과 해당 파일이 어떻게 보이는지 확인하기 위해 다음과 같은 cat 명령을 사용해 봅시다.
cat tecmint.txt
3. 파일 내용 정렬
명령어 “sort tecmint.txt“는 파일 내의 라인을 오름차순으로 알파벳 순서로 재배열하는 데 사용됩니다. 만약 중복된 라인이 있다면, 각 고유한 라인의 한 카피만을 유지합니다.
sort tecmint.txt
4. 정렬된 출력을 새 파일로 리다이렉션
다음 명령어는 텍스트 파일 “tecmint.txt“의 라인을 알파벳 순서로 정렬한 후, 정렬된 출력을 새 파일 “sorted.txt“로 리다이렉션하는 데 사용됩니다. 즉, 원래 파일은 변경되지 않고, 정렬된 내용은 별도의 파일에 저장됩니다.
내용을 확인하려면 cat 명령어를 사용하십시오.
sort tecmint.txt > sorted.txt cat sorted.txt
5. 파일 내용을 역순으로 정렬
다음 명령어는 텍스트 파일 “tecmint.txt“의 라인을 역순으로 정렬하는 데 사용됩니다. 즉, 라인을 내림차순으로 알파벳 순서로 배열하고, 정렬된 출력은 새 파일 “reversesorted.txt“로 리다이렉션됩니다.
sort -r tecmint.txt > reversesorted.txt cat reversesorted.txt
6. 파일 및 디렉토리 목록 저장
다음 명령어는 사용자의 홈 디렉토리(“/home/$USER“)의 내용을 ls 명령어를 사용하여 상세하고 긴 형식으로 나열한 다음, 이 디렉토리 목록을 사용자의 바탕화면에 있는 “tecmint” 디렉토리의 “lsl.txt”라는 텍스트 파일로 리다이렉션합니다.
ls -l /home/$USER > /home/$USER/Desktop/tecmint/lsl.txt cat lsl.txt
이제 기본 초기 문자가 아닌 필드를 기준으로 내용을 정렬하는 예제를 살펴보겠습니다.
7. 두 번째 필드를 기준으로 파일 내용 정렬
다음 명령어는 “lsl.txt” 파일의 내용을 각 줄의 두 번째 필드의 값을 기준으로 정렬하는 데 사용됩니다. '-n'
옵션은 숫자 정렬을 나타내며, 두 번째 필드를 텍스트 대신 숫자로 취급합니다.
'-k2'
옵션은 두 번째 필드를 기준으로 정렬하고 싶다는 것을 지정합니다. 이 명령어를 실행하면 “lsl.txt”의 줄 목록을 두 번째 필드의 숫자 값을 기준으로 정렬된 결과를 얻게 됩니다.
sort -nk2 lsl.txt
8. 아홉 번째 필드를 기준으로 파일 내용 정렬
다음 명령어는 “lsl.txt” 파일의 줄을 오름차순으로 정렬하는 데 사용되며, 각 줄의 아홉 번째 필드의 값을 기준으로 정렬합니다. '-k9'
옵션은 아홉 번째 필드를 기준으로 정렬해야 한다는 것을 지정합니다.
sort -k9 lsl.txt
9. 파일 크기별로 파일 정렬
다음 명령어는 ‘ls’와 ‘sort’ 명령어를 결합하여 사용자의 홈 디렉토리 내용을 긴 목록 형식으로 나열한 다음, 해당 디렉토리 목록을 'sort -nk5'
로 파이프하여 5번째 열, 즉 파일 크기를 기준으로 목록을 정렬합니다.
ls -l /home/$USER | sort -nk5
10. 파일에서 중복 라인 제거
다음 명령어는 파일 “tecmint.txt”의 라인을 오름차순으로 정렬하고, '-u'
옵션을 사용하여 중복 라인을 제거합니다. 이 옵션은 “unique”를 의미하며, 정렬된 출력에서 고유한 라인만 유지되도록 합니다.
$ cat tecmint.txt $ sort -u tecmint.txt
지금까지의 규칙(관찰된 사항):
- 숫자로 시작하는 라인은 특별한 지정이 없는 한(예:
-r
) 목록에서 우선적으로 위쪽에 위치합니다. - 소문자로 시작하는 라인은 특별한 지정이 없는 한(예:
-r
) 목록에서 우선적으로 위쪽에 위치합니다. - 내용은 특별한 지정이 없는 한(예:
-r
) 사전의 알파벳 발생 순서에 따라 나열됩니다. - 기본적으로 정렬 명령어는 각 라인을 문자열로 취급한 후 사전의 알파벳 발생 순서에 따라 정렬합니다(숫자 우선; 규칙 참조 – 1). 특별한 지정이 없는 한.
11. 디렉토리 목록을 파일로 리다이렉션
다음 명령어는 사용자의 홈 디렉토리 내용을 긴 형식으로 나열하고, 숨겨진 파일과 디렉토리를 포함한 다음, 디렉토리 목록을 사용자의 바탕화면 내 “tecmint” 디렉토리에 있는 “lsla.txt“라는 텍스트 파일로 리다이렉트합니다.
ls -lA /home/$USER > /home/$USER/Desktop/tecmint/lsla.txt cat lsla.txt
ls 명령어에 익숙한 사람들은 'ls -lA'
가 'ls -l'
에 숨겨진 파일을 더한 것과 동일하다는 것을 이해합니다. 따라서 이 두 명령어의 내용의 대부분은 동일합니다.
12. 파일 내용 정렬
다음 명령어는 ‘lsl.txt’와 ‘lsla.txt’라는 두 개의 텍스트 파일의 내용을 오름차순으로 정렬한 다음, 정렬된 내용을 터미널에 결합하여 표시합니다.
$ sort lsl.txt lsla.txt
파일과 폴더의 반복이 눈에 띕니다.
13. 파일에서 중복 라인 제거
다음 명령어는 ‘lsl.txt’와 ‘lsla.txt’라는 두 개의 텍스트 파일의 내용을 오름차순으로 병합하고 정렬하되, '-u'
옵션을 사용하여 중복 라인을 제거하고 정렬된 출력에서 고유한 라인만 유지합니다.
$ sort -u lsl.txt lsla.txt
출력에서 중복이 생략되었음을 알 수 있습니다. 또한 출력을 리다이렉트하여 새 파일에 저장할 수 있습니다.
14. 사용자 정의 구분자를 사용하여 여러 필드로 출력 정렬
다음 명령어는 ‘ls‘와 ‘sort‘ 명령어를 결합하여 사용자의 홈 디렉토리 내용을 긴 형식으로 나열한 다음, 디렉토리 목록을 ‘sort‘ 명령어로 파이핑하여 특정 열과 필드를 기준으로 출력을 정렬합니다.
ls -l /home/$USER | sort -t "," -nk2,5 -k9
명령의 분해 설명은 다음과 같습니다:
-t ","
– 쉼표(",")
를 필드 구분자로 사용한다는 것을 지정합니다.-nk2,5
– 일반적으로 권한 및 소유권 세부 정보를 나타내는 열 2에서 5까지의 숫자 값으로 정렬합니다.-k9
– 파일 크기를 나타내는 아홉 번째 열을 기준으로 결과를 추가로 정렬합니다.
지금까지 이번 글의 내용입니다. 다음 글에서는 여러분을 위한 sort 명령어의 더 자세한 예시로 들어갈 예정입니다.
계속해서 공유, 댓글, 좋아요를 하고, 더 많은 독자들에게 접근할 수 있도록 도와주세요.