소개
이번 실습에서는 Linux의 cut 명령어를 사용하여 텍스트 파일에서 데이터를 추출하고 분석하는 방법을 배웁니다. 지역 서점에서 근무하며 고객 및 도서 정보를 처리해야 하는 상황을 가정해 보겠습니다. cut 명령어를 사용하면 데이터 파일에서 특정 열이나 필드를 효율적으로 추출하여 데이터 관리 및 분석을 수행할 수 있습니다.
사전 준비 사항
실습을 시작하기 전에 다음 사항을 확인하세요:
- Linux 명령줄에 대한 기본적인 이해
- Linux 터미널 사용 가능 여부 (이 실습은
/home/labex/project디렉토리에서 터미널을 사용하는 것을 가정합니다)
서점 데이터 이해하기
먼저 서점 데이터 파일을 살펴보겠습니다. customers.txt와 books.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
이 파이프라인은 두 가지 작업을 수행합니다:
cut이 각 라인에서 두 번째 필드(이름)를 추출합니다.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 명령어와 결합할 때 더욱 강력해집니다. cut을 grep과 함께 사용하여 가격이 20달러 이상인 모든 도서를 찾아 제목을 표시해 보겠습니다.
다음 명령어를 실행하세요:
grep -E ',[2-9][0-9]\.[0-9]{2}$' /home/labex/project/books.txt | cut -d ',' -f 2
이 명령어 파이프라인은 두 가지 작업을 수행합니다:
grep -E ',[2-9][0-9]\.[0-9]{2}$': 정규 표현식을 사용하여 가격이 20달러 이상인 라인을 찾습니다.,[2-9][0-9]\.[0-9]{2}$: 쉼표 뒤에 20에서 99 사이의 숫자, 소수점, 그리고 라인 끝에 두 자리 숫자가 오는 패턴을 찾습니다.
cut -d ',' -f 2:grep이 찾은 라인에서 도서 제목(두 번째 필드)만 추출합니다.
다음과 유사한 출력이 나타나야 합니다:
Mystery in the Woods
Science Explained
예상한 출력이 보이지 않는다면:
books.txt파일에 올바른 데이터가 포함되어 있는지 확인하세요.grep정규 표현식을 올바르게 입력했는지 확인하세요.grep명령어만 단독으로 실행하여 어떤 라인이 선택되는지 확인해 보세요.cut명령어가 두 번째 필드를 올바르게 지정하고 있는지 확인하세요.
요약
이번 실습에서는 Linux의 cut 명령어를 사용하여 텍스트 파일에서 특정 데이터를 추출하는 방법을 배웠습니다. 다음 내용을 연습했습니다:
- CSV 파일에서 단일 필드 추출
- 여러 필드 및 필드 범위 추출
- 고정 폭 데이터 작업
cut과grep같은 다른 명령어 결합
이러한 기술은 서점 재고 관리부터 모든 종류의 구조화된 텍스트 데이터 처리까지, 다양한 시나리오에서 데이터 처리 및 분석을 위해 매우 유용합니다.
이번 실습에서 다루지 않은 추가적인 cut 명령어 매개변수:
-s: 구분 기호가 포함되지 않은 라인 억제--output-delimiter=STRING: STRING을 출력 구분 기호로 사용--complement: 선택된 바이트, 문자 또는 필드 집합을 보완(반전)
학습을 더 발전시키려면 이러한 추가 매개변수를 실험해 보고 직접 데이터 파일을 만들어 연습해 보세요. 더 자세한 정보가 필요하면 man cut 명령어를 통해 cut 명령어에 대한 포괄적인 매뉴얼을 확인할 수 있습니다.



