반응형
리눅스 환경에서는 텍스트 처리, CSV 파일 생성, 외부 명령어 실행(system() 활용) 등을 통해 손쉽게 데이터 가공 및 압축을 할 수 있습니다.
이번 글에서는 1) 텍스트 파일 읽기 → 2) 원하는 데이터만 추출 → 3) CSV 파일에 저장 → 4) ZIP 파일로 압축 과정을 C언어 코드 예제와 함께 설명합니다.
🔧 개발 환경
- OS: Ubuntu 20.04 (리눅스 계열 공통 사용 가능)
- 언어: C (gcc 컴파일러)
- 필요 패키지: zip 유틸리티 (없을 경우 sudo apt install zip)
📂 처리 단계 설명
- 텍스트 파일 열기 (input.txt)
- 예: 로그 파일, 데이터 파일
- 각 줄에서 특정 패턴(예: 숫자, 키워드)을 추출
- 필요한 데이터만 추출
- 예제에서는 줄 안의 숫자만 추출
- CSV 파일(output.csv)에 저장
- CSV 형식으로 id,value 같은 구조로 저장
- ZIP 압축하기
- system("zip output.zip output.csv"); 명령어 실행
📝 샘플 코드 (Linux C)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define MAX_LINE 1024
// 숫자만 추출하는 간단한 함수
void extract_numbers(const char *line, char *out) {
int j = 0;
for (int i = 0; line[i] != '\0'; i++) {
if (isdigit((unsigned char)line[i])) {
out[j++] = line[i];
}
}
out[j] = '\0';
}
int main() {
FILE *fin, *fout;
char line[MAX_LINE];
char numbers[MAX_LINE];
int id = 1;
// 1. 입력 파일 열기
fin = fopen("input.txt", "r");
if (!fin) {
perror("input.txt open error");
return 1;
}
// 2. CSV 파일 열기
fout = fopen("output.csv", "w");
if (!fout) {
perror("output.csv open error");
fclose(fin);
return 1;
}
// CSV 헤더 작성
fprintf(fout, "id,value\n");
// 3. 텍스트 파일 한 줄씩 읽어서 숫자만 추출 후 CSV 저장
while (fgets(line, sizeof(line), fin)) {
extract_numbers(line, numbers);
if (strlen(numbers) > 0) {
fprintf(fout, "%d,%s\n", id++, numbers);
}
}
fclose(fin);
fclose(fout);
// 4. ZIP 압축 실행
int ret = system("zip output.zip output.csv");
if (ret == -1) {
perror("zip command error");
return 1;
}
printf("작업 완료: output.csv → output.zip 생성됨\n");
return 0;
}📑 input.txt 예시
user: kim, age=29
user: lee, age=34
user: park, age=41
error: no data
user: choi, age=27📑 실행 결과 (output.csv)
id,value
1,29
2,34
3,41
4,27📦 압축 결과
실행 후, 현재 디렉토리에 output.zip 파일이 생성됩니다.
압축 해제하면 output.csv가 들어있습니다.
💡 정리
- fopen, fgets, fprintf 등 기본 C 표준 라이브러리를 활용해서 텍스트 데이터를 읽고 CSV 저장 가능
- system() 함수를 사용하여 리눅스 명령어(zip) 실행 → 별도 라이브러리 없이도 압축 가능
- 필요에 따라 데이터 필터링 조건(숫자 외에 특정 키워드 추출)만 수정하면 다양한 로그 처리 프로그램 제작 가능
반응형
'C' 카테고리의 다른 글
| Unity 프레임워크 기반 C언어 테스트 에비던스 저장 샘플 (4) | 2025.07.26 |
|---|---|
| CUnit을 활용한 리눅스 C언어 테스트 에비던스 자동화 가이드 (2) | 2025.07.24 |
| 리눅스 C 언어 GDB 디버깅 가이드: 기초부터 실전까지 (6) | 2025.07.22 |
| Linux 환경에서 C 언어로 AI 프로그램 만들기 - 간단한 신경망 구현 (2) | 2025.06.21 |
| Linux 환경에서 C 언어 함수 최적화 방법: 실전 예제 중심으로 (2) | 2025.06.19 |
댓글