리눅스 명령어 cut 사용법 및 5가지 옵션

리눅스 명령어 cut은 파일의 특정 열이나 필드만을 추출하고 싶을 때 유용하게 사용할 수 있습니다. 이 명령어는 텍스트 데이터를 다룰 때 매우 유용하며, 특히 데이터가 구분자로 나뉘어 있는 경우 특정 필드만 뽑아내는 데 탁월한 성능을 발휘합니다. 이번 글에서는 cut 명령어의 기본 사용법과 다양한 옵션에 대해 알아보겠습니다.

리눅스 명령어 cut란?

cut은 텍스트 파일에서 특정한 열이나 필드를 추출하는 데 사용되는 리눅스 명령어입니다. 파일의 내용이 일정한 구분자(delimiter)로 구분되어 있을 때, 원하는 부분만 뽑아낼 수 있는 기능을 제공합니다. 예를 들어 CSV 파일에서 특정 열만을 추출할 때 유용합니다.

기본 구문

cut 명령어의 기본적인 사용법은 다음과 같습니다.

cut [옵션] [파일명]
ShellScript

옵션을 통해 열(column)이나 필드를 지정하고, 파일명을 입력하면 해당 파일에서 특정 열이나 필드가 출력됩니다. 옵션이 필수적이므로, 옵션을 사용하지 않으면 아무런 출력도 나타나지 않으니 주의해야 합니다.

주요 옵션

-f (필드 선택)

-f 옵션은 구분자로 나뉜 텍스트 파일에서 특정 필드를 선택할 때 사용됩니다. 이 옵션은 주로 -d 옵션과 함께 사용됩니다. -d 옵션은 구분자를 설정하는 옵션으로, 기본적으로 탭(tab)이 구분자로 설정되어 있지만, 콤마(,)나 세미콜론(;), 스페이스( ) 등을 구분자로 지정할 수 있습니다.

cut -f 2 -d ',' example.csv
ShellScript

위 명령어는 example.csv 파일에서 콤마(,)로 구분된 두 번째 필드를 추출하는 예시입니다. 다음은 example.csv의 내용입니다.

Name,Age
Freud,23
Rachel,37
Mary,59
Adler,93
example.csv

그리고 아래는 cut 명령어를 실행한 결과입니다.

그림 1. 리눅스 명령어 cut -f 옵션과 -d 옵션으로 csv 파일의 2번째 열의 값 출력

-d (구분자 설정)

-d 옵션은 필드를 구분하는 문자를 지정하는 데 사용됩니다. 기본적으로 cut 명령어는 탭(tab) 문자를 구분자로 인식합니다. 하지만 CSV 파일이나 다른 구분자를 사용하는 파일을 다룰 때는 직접 구분자를 설정해 주어야 합니다.

cut -f 1 -d ':' /etc/passwd
ShellScript

이 명령어는 /etc/passwd 파일에서 콜론(:)을 구분자로 설정하여 첫 번째 필드를 출력하는 예시입니다. /etc/passwd 파일은 사용자 정보가 콜론으로 구분되어 있기 때문에 이런 경우 유용하게 사용할 수 있습니다. 아래는 /etc/passwd 파일의 첫 번째 열을 출력한 결과입니다.

그림 2. 리눅스 명령어 cut -d 옵션으로 구분자 설정하여 /etc/passwd의 첫 번째 열 출력

-c (문자 단위 추출)

-c 옵션은 특정 열이 아니라 문자(character) 단위로 데이터를 추출하고자 할 때 사용됩니다. 예를 들어, 모든 줄의 첫 번째 문자부터 세 번째 문자까지를 추출하고 싶을 때는 다음과 같이 명령어를 사용합니다.

cut -c 1-3 example.txt
ShellScript

이 명령어는 example.txt 파일에서 각 줄의 첫 번째부터 세 번째까지의 문자를 출력합니다. 파일의 구조가 일정한 패턴을 가지고 있다면 유용하게 사용할 수 있는 옵션입니다. 아래의 그림에서는 /etc/passwd를 대상으로 실행해 보았습니다.

그림 3. 리눅스 명령어 cut -c 옵션으로 모든 줄의 1~3번째 문자까지만 출력

–complement (선택 항목 제외)

--complement 옵션은 지정한 필드나 문자를 제외하고 나머지를 출력하고자 할 때 사용됩니다. 예를 들어, 두 번째 필드를 제외하고 모든 필드를 출력하고 싶다면 다음과 같이 명령어를 입력합니다.

cut -f 2 --complement -d ',' example.csv
ShellScript

이 명령어는 example.csv 파일에서 두 번째 필드를 제외한 나머지 필드를 출력합니다. 특정 데이터를 제외하고 나머지 데이터를 확인하고자 할 때 유용합니다.

그림 4. 리눅스 명령어 cut –complement 옵션으로 지정한 필드를 제외하고 출력

–output-delimiter (출력 구분자 설정)

그리고 여러 필드를 지정하고 싶다면 아래 그림과 같이 쉼표(,)로 구분지어 주면 됩니다. 또는 -f 1-5와 같이 하이픈으로 범위를 지정해 줄 수도 있습니다. 구분자는 입력 구분자인 ‘,’로 출력되는 것을 볼 수 있습니다.

그림 5. 리눅스 명령어 cut -f 옵션으로 여러 필드 선택

위의 그림과 같이 기본적으로 cut 명령어는 출력할 때 입력 구분자를 그대로 사용합니다. 하지만 --output-delimiter 옵션을 사용하면 출력 구분자를 따로 설정할 수 있습니다.

cut -f 1,2 -d ',' --output-delimiter='|' example.csv
ShellScript

이 명령어는 example.csv 파일에서 첫 번째와 두 번째 필드를 추출한 후, 이를 파이프(|) 기호로 구분하여 출력하는 예시입니다. 출력 형식을 변경하고자 할 때 매우 유용한 옵션입니다.

그림 6. 리눅스 명령어 cut –output-delimiter로 출력 구분자 설정

주의사항

  1. 구분자를 명확하게 설정해야 합니다: 기본적으로 cut 명령어는 탭(tab)을 구분자로 사용하므로, CSV 파일이나 다른 구분자가 사용된 파일을 다룰 때는 반드시 -d 옵션을 사용해 구분자를 지정해 주어야 합니다.
  2. 빈 필드 처리: 필드가 비어 있는 경우에도 cut 명령어는 이를 인식하여 빈 필드로 출력합니다. 빈 필드를 처리하는 다른 명령어와 함께 사용하는 것이 좋습니다.
  3. 파일 형식에 주의: cut 명령어는 고정된 구분자를 기반으로 동작하므로, 구분자가 일정하지 않은 파일에서는 제대로 된 결과를 얻기 어렵습니다. 이런 경우에는 awksed 같은 다른 텍스트 처리 명령어를 사용하는 것이 좋습니다.

정리

cut 명령어는 리눅스에서 텍스트 파일을 다룰 때 매우 유용한 도구입니다. 특히, 구분자로 나뉜 데이터를 처리할 때 원하는 필드나 열을 손쉽게 추출할 수 있습니다. -f, -d, -c 같은 옵션을 잘 활용하면 복잡한 텍스트 파일에서도 필요한 정보만을 깔끔하게 추출할 수 있습니다. 다만, 파일의 구분자나 형식이 명확해야 하며, 구분자를 잘못 설정하면 원하는 결과를 얻지 못할 수 있으니 주의가 필요합니다. cut 명령어를 익히면 데이터 처리 작업이 한결 수월해질 것입니다.

참고자료

관련 포스트

Leave a Comment