소개
Linux 텍스트 자르기 랩에 오신 것을 환영합니다. 이 랩에서는 Linux 에서 cut 명령을 사용하여 텍스트 파일의 특정 부분을 추출하는 방법을 배우게 됩니다. cut 명령은 파일의 각 줄 또는 파이프된 데이터에서 섹션을 추출할 수 있는 강력한 텍스트 처리 도구입니다.
cut 명령의 다양한 옵션을 사용하여 구분 기호와 문자 위치를 기반으로 텍스트를 추출하는 방법을 배우게 됩니다. 이 기술은 CSV 파일, 로그 파일 또는 일관된 형식을 따르는 모든 데이터와 같은 구조화된 텍스트 파일 작업 시 특히 유용합니다.
이 랩을 마치면 시스템 관리, 데이터 처리 및 자동화 작업에 필수적인 기술인 Linux 환경에서 텍스트 데이터를 효율적으로 추출하고 조작할 수 있게 됩니다.
cut 명령어 기본 사용법 이해
이 단계에서는 cut 명령의 기본 사용법을 배우게 됩니다. Linux 에서 cut 명령은 파일의 각 줄 또는 파이프된 데이터에서 섹션을 추출하는 데 사용됩니다.
작업할 수 있는 간단한 데이터 파일을 만들어 보겠습니다.
cd ~/project
echo "name:age:city:occupation" > data/users.txt
echo "Alice:25:New York:Engineer" >> data/users.txt
echo "Bob:30:San Francisco:Designer" >> data/users.txt
echo "Charlie:22:Chicago:Student" >> data/users.txt
echo "Diana:28:Boston:Doctor" >> data/users.txt
위의 명령은 ~/project/data 디렉토리에 콜론으로 구분된 다섯 줄의 값을 가진 users.txt라는 파일을 생성합니다.
이제 이 파일의 내용을 살펴보겠습니다.
cat data/users.txt
다음과 같은 출력을 볼 수 있습니다.
name:age:city:occupation
Alice:25:New York:Engineer
Bob:30:San Francisco:Designer
Charlie:22:Chicago:Student
Diana:28:Boston:Doctor
구분 기호와 함께 cut 사용하기
cut을 사용하는 가장 일반적인 방법은 특정 필드를 추출하기 위해 구분 기호를 사용하는 것입니다. 기본 구문은 다음과 같습니다.
cut -d'delimiter' -f fields file
여기서:
-d는 구분 기호 문자를 지정합니다.-f는 추출할 필드를 지정합니다.file은 입력 파일입니다.
데이터 파일에서 이름을 (첫 번째 필드) 추출해 보겠습니다.
cut -d':' -f1 data/users.txt
이 명령은 cut에게 다음을 지시합니다.
:를 구분 기호로 사용 (-d':')- 첫 번째 필드 추출 (
-f1) - 파일
data/users.txt에서
다음과 같은 출력을 볼 수 있습니다.
name
Alice
Bob
Charlie
Diana
이제 나이 (두 번째 필드) 를 추출해 보겠습니다.
cut -d':' -f2 data/users.txt
출력:
age
25
30
22
28
여러 필드 추출하기
쉼표로 구분된 목록으로 지정하여 여러 필드를 추출할 수 있습니다.
cut -d':' -f1,3 data/users.txt
이것은 첫 번째 및 세 번째 필드 (이름 및 도시) 를 추출합니다.
name:city
Alice:New York
Bob:San Francisco
Charlie:Chicago
Diana:Boston
필드 범위 추출하기
하이픈을 사용하여 필드 범위를 추출할 수도 있습니다.
cut -d':' -f2-4 data/users.txt
이것은 2 에서 4 까지의 필드 (나이, 도시 및 직업) 를 추출합니다.
age:city:occupation
25:New York:Engineer
30:San Francisco:Designer
22:Chicago:Student
28:Boston:Doctor
다른 명령과 결합하기
cut 명령은 파이프를 사용하여 다른 명령과 결합할 수 있습니다. 예를 들어, 엔지니어인 사람들의 나이만 추출하려면 다음과 같이 합니다.
grep "Engineer" data/users.txt | cut -d':' -f2
출력:
25
명령에 익숙해지도록 다양한 필드 조합을 실험해 보십시오.
문자 위치별 자르기
구분 기호를 기반으로 필드를 자르는 것 외에도, cut 명령은 문자 위치를 기반으로 텍스트를 추출할 수도 있습니다. 이는 고정 폭 데이터 형식으로 작업하거나 각 줄에서 특정 문자를 추출해야 할 때 유용합니다.
고정 폭 데이터 생성하기
이 기능을 시연하기 위해 고정 폭 데이터가 있는 새 파일을 만들어 보겠습니다.
cd ~/project
echo "ID Name Department Salary" > data/employees.txt
echo "001 John IT 75000" >> data/employees.txt
echo "002 Mary HR 65000" >> data/employees.txt
echo "003 Steve Sales 85000" >> data/employees.txt
echo "004 Jennifer Marketing 70000" >> data/employees.txt
이제 이 파일을 살펴보겠습니다.
cat data/employees.txt
다음과 같은 출력을 볼 수 있습니다.
ID Name Department Salary
001 John IT 75000
002 Mary HR 65000
003 Steve Sales 85000
004 Jennifer Marketing 70000
문자 위치별 추출하기
문자 위치를 기반으로 텍스트를 추출하려면 -c 옵션을 사용하고 추출하려는 위치를 지정합니다. 구문은 다음과 같습니다.
cut -c positions file
데이터 파일에서 직원 ID (처음 3 자) 를 추출해 보겠습니다.
cut -c1-3 data/employees.txt
이 명령은 cut에게 각 줄에서 1 에서 3 까지의 문자를 추출하도록 지시합니다. 다음을 볼 수 있습니다.
ID
001
002
003
004
특정 문자 추출하기
특정, 연속되지 않은 문자를 추출할 수도 있습니다.
cut -c1,5,9 data/employees.txt
이것은 각 줄에서 첫 번째, 다섯 번째 및 아홉 번째 문자를 추출합니다.
I N
0 J
0 M
0 S
0 J
특정 위치에서 끝까지 추출하기
특정 위치에서 줄의 끝까지 문자를 추출하려면 위치 번호 뒤에 하이픈을 사용합니다.
cut -c5- data/employees.txt
이것은 각 줄의 5 번째 위치에서 끝까지 문자를 추출합니다.
Name Department Salary
John IT 75000
Mary HR 65000
Steve Sales 85000
Jennifer Marketing 70000
문자 위치 추출과 파이핑 결합하기
cut 명령은 파이프를 사용하여 다른 명령과 결합할 수 있습니다. 예를 들어, 급여가 70000 이상인 직원의 부서 이름 (문자 13-22) 만 추출하려면 다음과 같이 합니다.
grep -E "[7-9][0-9]000" data/employees.txt | cut -c13-22
다음과 같이 출력됩니다.
IT
Sales
연습 문제
직원 파일에서 이름 (문자 5-12) 만 추출해 보십시오.
cut -c5-12 data/employees.txt
다음과 같은 출력을 볼 수 있습니다.
Name
John
Mary
Steve
Jennifer
보시다시피, 문자 위치별 자르기는 각 필드가 각 줄에서 특정 수의 문자를 차지하는 고정 폭 데이터 형식을 처리하는 데 특히 유용합니다.
cut 명령어와 다른 텍스트 처리 도구 결합
이 단계에서는 cut 명령을 다른 Linux 텍스트 처리 명령과 결합하여 보다 복잡한 데이터 추출 및 조작 작업을 수행하는 방법을 배우게 됩니다.
CSV 데이터 파일 만들기
먼저, 작업할 CSV (Comma-Separated Values, 쉼표로 구분된 값) 파일을 만들어 보겠습니다.
cd ~/project
echo "Date,Product,Quantity,Price,Total" > data/sales.csv
echo "2023-01-15,Laptop,5,1200,6000" >> data/sales.csv
echo "2023-01-16,Mouse,20,25,500" >> data/sales.csv
echo "2023-01-17,Keyboard,15,50,750" >> data/sales.csv
echo "2023-01-18,Monitor,8,200,1600" >> data/sales.csv
echo "2023-01-19,Headphones,12,80,960" >> data/sales.csv
이 파일의 내용을 확인해 보겠습니다.
cat data/sales.csv
다음과 같은 출력을 볼 수 있습니다.
Date,Product,Quantity,Price,Total
2023-01-15,Laptop,5,1200,6000
2023-01-16,Mouse,20,25,500
2023-01-17,Keyboard,15,50,750
2023-01-18,Monitor,8,200,1600
2023-01-19,Headphones,12,80,960
cut 과 grep 결합하기
grep을 사용하여 특정 패턴을 포함하는 줄을 찾은 다음, cut을 사용하여 해당 줄에서 특정 필드를 추출할 수 있습니다.
grep "Laptop" data/sales.csv | cut -d',' -f3-5
이 명령은 먼저 "Laptop"을 포함하는 모든 줄을 찾은 다음, 필드 3-5 (수량, 가격 및 총액) 를 추출합니다. 다음을 볼 수 있습니다.
5,1200,6000
cut 과 sort 결합하기
sort를 사용하여 특정 필드를 기준으로 데이터를 정렬할 수 있습니다.
cut -d',' -f2,4 data/sales.csv | sort -t',' -k2nr
이 명령은 제품 (필드 2) 과 가격 (필드 4) 을 추출한 다음, 가격을 기준으로 숫자 내림차순으로 정렬합니다. -t',' 옵션은 sort의 구분 기호를 지정하고, -k2는 두 번째 필드를 기준으로 정렬함을 나타내며, n은 숫자 정렬을, r은 역순을 나타냅니다.
다음과 같은 출력을 볼 수 있습니다.
Product,Price
Laptop,1200
Monitor,200
Headphones,80
Keyboard,50
Mouse,25
cut 과 sed 결합하기
sed 명령은 기본적인 텍스트 변환을 수행할 수 있는 스트림 편집기입니다. 다음은 cut과 sed를 결합한 예입니다.
cut -d',' -f1,2,5 data/sales.csv | sed 's/,/ - /g'
이것은 날짜, 제품 및 총액 필드를 추출한 다음, 모든 쉼표를 " - "로 바꿉니다. 다음을 볼 수 있습니다.
Date - Product - Total
2023-01-15 - Laptop - 6000
2023-01-16 - Mouse - 500
2023-01-17 - Keyboard - 750
2023-01-18 - Monitor - 1600
2023-01-19 - Headphones - 960
cut 과 awk 결합하기
awk 명령은 강력한 텍스트 처리 도구입니다. 다음은 cut과 결합하는 방법입니다.
cut -d',' -f2-4 data/sales.csv | awk -F',' 'NR > 1 {print $1 " costs $" $3 " per unit"}'
이것은 필드 2-4 (제품, 수량 및 가격) 을 추출한 다음, awk를 사용하여 메시지를 형식화합니다. NR > 1 조건은 헤더 행을 건너뛰고, print 문은 출력을 형식화합니다.
다음과 같은 출력을 볼 수 있습니다.
Laptop costs $1200 per unit
Mouse costs $25 per unit
Keyboard costs $50 per unit
Monitor costs $200 per unit
Headphones costs $80 per unit
여러 파일 처리하기
cut을 여러 파일과 함께 사용할 수도 있습니다. 다른 파일을 만들어 보겠습니다.
echo "Category,Product,Stock" > data/inventory.csv
echo "Electronics,Laptop,15" >> data/inventory.csv
echo "Accessories,Mouse,50" >> data/inventory.csv
echo "Accessories,Keyboard,30" >> data/inventory.csv
echo "Electronics,Monitor,20" >> data/inventory.csv
echo "Accessories,Headphones,25" >> data/inventory.csv
이제 두 파일에서 제품 필드를 추출해 보겠습니다.
cut -d',' -f2 data/sales.csv data/inventory.csv
다음과 같은 출력을 볼 수 있습니다.
Product
Laptop
Mouse
Keyboard
Monitor
Headphones
Product
Laptop
Mouse
Keyboard
Monitor
Headphones
cut 명령은 모든 파일을 처리하고 모든 결과를 순차적으로 출력합니다. 두 헤더 행이 모두 포함되어 있음을 알 수 있습니다.
cut을 다른 텍스트 처리 도구와 결합하여 Linux 에서 정교한 데이터 조작 작업을 효율적으로 수행할 수 있습니다.
cut 명령어의 실용적인 활용
이 단계에서는 실제 시나리오에서 발생할 수 있는 cut 명령의 몇 가지 실용적인 활용 사례를 살펴보겠습니다.
로그 파일 분석
로그 파일은 텍스트 처리 도구의 일반적인 사용 사례입니다. 간단한 Apache 스타일 액세스 로그 파일을 만들어 보겠습니다.
cd ~/project
cat > data/access.log << EOF
192.168.1.100 - - [15/Feb/2023:10:12:01 -0500] "GET /index.html HTTP/1.1" 200 2048
192.168.1.102 - - [15/Feb/2023:10:13:25 -0500] "GET /images/logo.png HTTP/1.1" 200 4096
192.168.1.103 - - [15/Feb/2023:10:14:10 -0500] "POST /login.php HTTP/1.1" 302 1024
192.168.1.100 - - [15/Feb/2023:10:15:30 -0500] "GET /dashboard.html HTTP/1.1" 200 3072
192.168.1.104 - - [15/Feb/2023:10:16:22 -0500] "GET /css/style.css HTTP/1.1" 404 512
192.168.1.105 - - [15/Feb/2023:10:17:40 -0500] "GET /index.html HTTP/1.1" 200 2048
EOF
로그 파일에서 IP 주소 (첫 번째 필드) 를 추출해 보겠습니다.
cut -d' ' -f1 data/access.log
다음과 같은 출력을 볼 수 있습니다.
192.168.1.100
192.168.1.102
192.168.1.103
192.168.1.100
192.168.1.104
192.168.1.105
이제 HTTP 상태 코드 (9 번째 필드) 를 추출해 보겠습니다.
cut -d' ' -f9 data/access.log
다음과 같은 출력을 볼 수 있습니다.
200
200
302
200
404
200
구성 파일 처리
또 다른 일반적인 사용 사례는 구성 파일 처리입니다. 간단한 구성 파일을 만들어 보겠습니다.
cat > data/config.ini << EOF
[Database]
host=localhost
port=3306
user=dbuser
password=dbpass
[Server]
host=192.168.1.10
port=8080
maxConnections=100
[Logging]
level=INFO
file=/var/log/app.log
EOF
모든 매개변수 이름 (등호 기호 앞 부분) 을 추출하려면:
grep -v "^\[" data/config.ini | cut -d'=' -f1
이 명령은 grep -v "^\["를 사용하여 섹션 헤더 ( [로 시작하는 줄) 를 제외한 다음, cut을 사용하여 = 앞 부분을 추출합니다. 다음을 볼 수 있습니다.
host
port
user
password
host
port
maxConnections
level
file
보고를 위해 CSV 파일에서 데이터 추출하기
학생 성적을 나타내는 더 복잡한 CSV 파일을 만들어 보겠습니다.
cat > data/grades.csv << EOF
StudentID,Name,Math,Science,English,History,Average
S001,John Smith,85,92,78,88,85.75
S002,Mary Johnson,90,88,92,85,88.75
S003,Robert Davis,78,80,85,92,83.75
S004,Jennifer Lee,95,93,90,87,91.25
S005,Michael Brown,82,85,88,90,86.25
EOF
학생 이름과 평균 성적을 보여주는 간단한 보고서를 생성하려면:
tail -n +2 data/grades.csv | cut -d',' -f2,6
tail -n +2 명령은 헤더 행을 건너뛰고, cut은 이름과 평균 필드를 추출합니다. 다음을 볼 수 있습니다.
John Smith,85.75
Mary Johnson,88.75
Robert Davis,83.75
Jennifer Lee,91.25
Michael Brown,86.25
평균 성적이 85 이상인 학생을 찾으려면:
tail -n +2 data/grades.csv | cut -d',' -f2,6 | awk -F',' '$2 > 85 {print $1 " has an average of " $2}'
다음과 같은 출력을 볼 수 있습니다.
John Smith has an average of 85.75
Mary Johnson has an average of 88.75
Jennifer Lee has an average of 91.25
Michael Brown has an average of 86.25
명령 출력에서 특정 열 추출하기
cut을 사용하여 명령 출력에서 특정 열을 추출할 수 있습니다. 예를 들어, 현재 디렉토리의 파일 이름과 크기만 나열하려면:
ls -l ~/project/data | tail -n +2 | cut -d' ' -f5,9
이 명령은 긴 형식으로 파일을 나열하고, 헤더 행을 건너뛰고, 크기 (필드 5) 와 이름 (필드 9) 을 추출합니다. 정확한 출력은 파일에 따라 다르지만 다음과 유사하게 표시됩니다.
237 access.log
99 config.ini
203 employees.txt
179 grades.csv
110 inventory.csv
150 sales.csv
264 users.txt
이러한 예는 cut 명령을 다양한 실제 시나리오에서 사용하여 텍스트 데이터의 특정 부분을 추출하고 처리하는 방법을 보여줍니다.
요약
이 랩에서는 Linux cut 명령을 사용하여 파일에서 특정 텍스트 부분을 추출하는 방법을 배웠습니다. 다음 내용을 다루었습니다.
- 구조화된 텍스트 파일에서 필드를 추출하기 위한 구분 기호와 함께
cut의 기본 사용법 - 고정 폭 데이터 형식에 대한 문자 위치를 기반으로 텍스트를 추출하는 방법
- 보다 복잡한 데이터 조작을 위해
grep,sort,sed,awk와 같은 다른 텍스트 처리 도구와cut을 결합하는 방법 - 로그 분석, 구성 파일 처리 및 데이터 보고와 같은 일반적인 시나리오에 대한
cut명령의 실용적인 응용
cut 명령은 Linux 텍스트 처리 도구 상자에서 강력한 도구입니다. 처음에는 간단해 보일 수 있지만, 특정 텍스트 부분을 추출하는 기능은 많은 데이터 처리 작업에 매우 중요합니다. 파이프를 통해 다른 Linux 명령과 결합하면 유연하고 강력한 텍스트 처리 시스템의 일부가 됩니다.
몇 가지 주요 내용:
- 구조화된 텍스트로 작업할 때는
-d를 사용하여 구분 기호를 지정하고-f를 사용하여 필드를 선택합니다. - 고정 폭 데이터로 작업할 때는
-c를 사용하여 특정 문자를 추출합니다. - 보다 정교한 처리를 위해 파이프를 사용하여 다른 명령과
cut을 결합합니다. cut명령은 데이터가 일관된 형식을 따를 때 가장 효과적입니다.
이러한 기술을 통해 이제 Linux 환경에서 텍스트 데이터를 효율적으로 추출하고 처리할 수 있으며, 이는 다양한 관리 및 데이터 처리 작업에 필수적입니다.



