소개
이 실습에서는 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 명령어에 대한 포괄적인 매뉴얼을 확인할 수 있습니다.



