Linux cut 명령어: 텍스트 자르기

LinuxBeginner
지금 연습하기

소개

이 실습에서는 Linux 의 cut 명령어를 사용하여 텍스트 파일에서 데이터를 추출하고 분석하는 방법을 배웁니다. 여러분이 지역 서점에서 근무하며 고객 및 도서 정보를 처리해야 하는 상황을 가정해 보겠습니다. cut 명령어는 데이터 파일에서 특정 열이나 필드를 추출하는 데 도움을 주어, 효율적인 데이터 관리와 분석을 가능하게 합니다.

사전 준비 사항

이 실습을 시작하기 전에 다음 사항을 확인하세요:

  • Linux 명령줄에 대한 기본적인 친숙함
  • Linux 터미널 접근 권한 (이 실습은 /home/labex/project 디렉토리의 터미널을 사용한다고 가정합니다)
이것은 학습과 연습을 돕기 위해 단계별 지침을 제공하는 가이드 실습입니다. 각 단계를 완료하고 실무 경험을 쌓으려면 지침을 주의 깊게 따르십시오. 과거 데이터에 따르면 이 실습은 완료율 93%초급 수준 실습입니다. 학습자들로부터 99%의 긍정적인 평가를 받았습니다.

서점 데이터 이해하기

먼저 서점 데이터 파일을 살펴보는 것으로 시작해 보겠습니다. customers.txtbooks.txt라는 두 개의 파일이 있습니다.

먼저 customers.txt 파일의 내용을 확인해 봅시다:

cat /home/labex/project/customers.txt

다음과 유사한 출력이 표시되어야 합니다:

ID,Name,Age,Email
1,John Doe,25,john.doe@email.com
2,Jane Smith,35,jane.smith@email.com
3,Lily Chen,30,lily.chen@email.com
4,Andy Brown,22,andy.brown@email.com

이제 books.txt 파일을 살펴보겠습니다:

cat /home/labex/project/books.txt

출력 결과는 다음과 같을 것입니다:

ISBN,Title,Author,Price
978-1234567890,The Great Adventure,Alice Writer,19.99
978-2345678901,Mystery in the Woods,Bob Author,24.99
978-3456789012,Cooking Basics,Carol Chef,15.99
978-4567890123,Science Explained,David Scientist,29.99

이 파일들은 고객과 도서에 대한 다양한 필드를 포함하고 있는 쉼표 구분 값 (CSV) 형식입니다.

예상되는 출력이 보이지 않거나 오류가 발생하면 다음 사항을 확인하세요:

  • 올바른 디렉토리 (/home/labex/project) 에 있는지 확인합니다.
  • ls -l 명령어를 실행하여 파일이 존재하는지 확인합니다.
  • 파일이 없는 경우 수동으로 생성하거나 실습 관리자에게 문의해야 할 수 있습니다.

고객 이름 추출하기

데이터를 확인했으니 이제 cut 명령어를 사용하여 특정 정보를 추출해 보겠습니다. 먼저 customers.txt 파일에서 고객 이름만 추출해 보겠습니다.

cut 명령어는 -d 옵션을 사용하여 구분자 (이 경우 쉼표) 를 지정하고, -f 옵션을 사용하여 표시할 필드를 선택합니다.

다음 명령어를 실행하세요:

cut -d ',' -f 2 /home/labex/project/customers.txt

이 명령어를 분석해 보겠습니다:

  • cut: 사용 중인 명령어의 이름입니다.
  • -d ',': 필드 사이의 구분자로 쉼표를 사용하도록 지정합니다.
  • -f 2: 두 번째 필드를 추출하도록 cut에 지시합니다.
  • /home/labex/project/customers.txt: 입력 파일의 경로입니다.

다음과 같은 출력이 표시되어야 합니다:

Name
John Doe
Jane Smith
Lily Chen
Andy Brown

"Name"이라는 헤더도 포함되어 있음을 알 수 있습니다. 이는 cut이 헤더 행을 파일의 다른 행과 동일하게 취급하기 때문입니다.

헤더를 제외하고 싶다면 tail 명령어를 cut과 함께 사용할 수 있습니다:

cut -d ',' -f 2 /home/labex/project/customers.txt | tail -n +2

이 파이프라인은 두 가지 작업을 수행합니다:

  1. cut이 각 행에서 두 번째 필드 (이름) 를 추출합니다.
  2. tail -n +2가 두 번째 행부터 출력을 시작하여 헤더를 효과적으로 건너뜁니다.

이제 출력은 다음과 같아야 합니다:

John Doe
Jane Smith
Lily Chen
Andy Brown

예상되는 출력이 보이지 않는 경우:

  • 명령어를 표시된 대로 정확하게 입력했는지 다시 확인하세요.
  • customers.txt 파일이 수정되지 않았는지 확인하세요.
  • cat /home/labex/project/customers.txt를 다시 실행하여 파일 내용을 확인해 보세요.

여러 필드 추출하기

종종 데이터에서 여러 필드를 추출해야 할 때가 있습니다. customers.txt 파일에서 고객 이름과 나이를 모두 추출해 보겠습니다.

다음 명령어를 사용하세요:

cut -d ',' -f 2,3 /home/labex/project/customers.txt

이 명령어는 이전 명령어와 유사하지만, 이제 -f 옵션에 두 개의 필드를 지정합니다:

  • -f 2,3: 두 번째와 세 번째 필드 (이름과 나이) 를 추출합니다.

출력은 다음과 같아야 합니다:

Name,Age
John Doe,25
Jane Smith,35
Lily Chen,30
Andy Brown,22

보시다시피 -f 옵션에서 쉼표로 구분하여 여러 필드를 지정할 수 있습니다. 출력은 추출된 필드 사이에 원래의 구분자 (쉼표) 를 유지합니다.

출력이 일치하지 않는 경우:

  • -f 옵션의 2 와 3 사이에 쉼표를 포함했는지 확인하세요.
  • customers.txt 파일이 변경되지 않았는지 확인하세요.
  • 파일이 다른 구분자를 사용하는지 확인하기 위해 -d ',' 옵션 없이 명령어를 실행해 보세요.

필드 범위 추출하기

cut 명령어를 사용하면 필드 범위를 추출할 수도 있습니다. customers.txt 파일에서 고객 ID 부터 나이까지 (필드 1-3) 모든 필드를 추출해 보겠습니다.

이 명령어를 사용하세요:

cut -d ',' -f 1-3 /home/labex/project/customers.txt

이 명령어에서 새로워진 부분은 다음과 같습니다:

  • -f 1-3: 1 번부터 3 번까지의 필드 범위를 지정합니다.

출력 결과는 다음과 같을 것입니다:

ID,Name,Age
1,John Doe,25
2,Jane Smith,35
3,Lily Chen,30
4,Andy Brown,22

이 명령어는 1 번부터 3 번까지의 필드 범위를 추출합니다. -f 1-3,5와 같이 범위와 개별 필드를 조합하여 1, 2, 3, 5 번 필드를 추출할 수도 있습니다.

예상되는 출력이 보이지 않는 경우:

  • -f 옵션의 1 과 3 사이에 하이픈 (-) 을 사용했는지 확인하세요.
  • customers.txt 파일이 수정되지 않았는지 확인하세요.
  • 모든 필드가 파일에 존재하는지 확인하기 위해 각 필드를 개별적으로 추출해 보세요 (예: -f 1, -f 2, -f 3).

고정 폭 필드 작업하기

때로는 데이터가 구분자로 나뉘지 않고 고정된 너비의 열로 배열되어 있는 경우가 있습니다. cut 명령어는 -c 옵션을 사용하여 문자 위치를 지정함으로써 이러한 경우도 처리할 수 있습니다.

고정 폭 데이터를 가진 새 파일을 만들어 보겠습니다:

cat << EOF > /home/labex/project/inventory.txt
ISBN     Title          Quantity
1234567890The Great Adv      100
2345678901Mystery in th       75
3456789012Cooking Basi       50
4567890123Science Exp        125
EOF

이 명령어는 히어 문서 (here-document, <<EOF) 를 사용하여 고정 폭 데이터를 포함하는 inventory.txt라는 새 파일을 생성합니다.

이제 문자 위치를 사용하여 도서 제목만 추출해 보겠습니다:

cut -c 11-25 /home/labex/project/inventory.txt

새로운 옵션 설명:

  • -c 11-25: 각 행에서 11 번째부터 25 번째 문자를 추출하도록 cut에 지시합니다.

다음과 같이 표시되어야 합니다:

itle          Q
The Great Adv
Mystery in th
Cooking Basi
Science Exp

이 명령어는 각 행에서 11 번째부터 25 번째 문자를 추출하며, 이는 고정 폭 데이터의 제목 필드에 해당합니다.

예상되는 출력이 나오지 않는 경우:

  • inventory.txt 파일이 올바르게 생성되었는지 확인하세요 (cat /home/labex/project/inventory.txt로 확인 가능).
  • 올바른 문자 범위 (11-25) 를 사용했는지 확인하세요.
  • 제목이 어긋나 보인다면 문자 범위를 조정해 보세요.

cut 과 다른 명령어 조합하기

cut 명령어는 다른 Linux 명령어와 조합될 때 더욱 강력해집니다. cutgrep을 함께 사용하여 가격이 20 달러 이상인 모든 도서를 찾아 제목을 표시해 보겠습니다.

다음 명령어를 실행하세요:

grep -E ',[2-9][0-9]\.[0-9]{2}$' /home/labex/project/books.txt | cut -d ',' -f 2

이 명령어 파이프라인은 두 가지 작업을 수행합니다:

  1. grep -E ',[2-9][0-9]\.[0-9]{2}$': 정규 표현식을 사용하여 가격이 20 달러 이상인 행을 찾습니다.
    • ,[2-9][0-9]\.[0-9]{2}$: 쉼표 다음에 20 에서 99 사이의 숫자, 소수점, 그리고 행 끝에 두 자리 숫자가 더 오는 패턴을 찾습니다.
  2. cut -d ',' -f 2: grep이 찾은 행에서 도서 제목 (두 번째 필드) 만 추출합니다.

다음과 유사한 출력이 표시되어야 합니다:

Mystery in the Woods
Science Explained

예상되는 출력이 보이지 않는 경우:

  • books.txt 파일에 올바른 데이터가 포함되어 있는지 확인하세요.
  • grep 정규 표현식을 올바르게 입력했는지 확인하세요.
  • grep 명령어를 단독으로 실행하여 어떤 행이 선택되는지 확인해 보세요.
  • cut 명령어가 두 번째 필드를 올바르게 지정하고 있는지 확인하세요.

요약

이 실습에서는 Linux 의 cut 명령어를 사용하여 텍스트 파일에서 특정 데이터를 추출하는 방법을 배웠습니다. 다음 내용을 연습했습니다:

  • CSV 파일에서 단일 필드 추출하기
  • 여러 필드 및 필드 범위 추출하기
  • 고정 폭 데이터 작업하기
  • cutgrep과 같은 다른 명령어와 조합하기

이러한 기술은 서점 재고 관리부터 모든 종류의 구조화된 텍스트 데이터 처리에 이르기까지 다양한 시나리오에서 데이터 처리 및 분석에 매우 유용합니다.

이 실습에서 다루지 않은 추가적인 cut 명령어 매개변수:

  • -s: 구분자가 포함되지 않은 행은 출력하지 않습니다.
  • --output-delimiter=STRING: 출력 시 지정한 문자열 (STRING) 을 구분자로 사용합니다.
  • --complement: 선택한 바이트, 문자 또는 필드 세트의 나머지를 추출합니다.

학습을 더 진행하려면 이러한 추가 매개변수를 실험해 보고 직접 데이터 파일을 만들어 연습해 보세요. 더 많은 정보가 필요하다면 man cut 명령어를 통해 cut 명령어에 대한 포괄적인 매뉴얼을 확인할 수 있습니다.

참고 자료