C

리눅스 C언어로 텍스트 데이터 추출 후 CSV 저장 및 ZIP 압축하기

지오준 2025. 8. 18.
반응형

리눅스 환경에서는 텍스트 처리, CSV 파일 생성, 외부 명령어 실행(system() 활용) 등을 통해 손쉽게 데이터 가공 및 압축을 할 수 있습니다.
이번 글에서는 1) 텍스트 파일 읽기 → 2) 원하는 데이터만 추출 → 3) CSV 파일에 저장 → 4) ZIP 파일로 압축 과정을 C언어 코드 예제와 함께 설명합니다.


🔧 개발 환경

  • OS: Ubuntu 20.04 (리눅스 계열 공통 사용 가능)
  • 언어: C (gcc 컴파일러)
  • 필요 패키지: zip 유틸리티 (없을 경우 sudo apt install zip)

📂 처리 단계 설명

  1. 텍스트 파일 열기 (input.txt)
    • 예: 로그 파일, 데이터 파일
    • 각 줄에서 특정 패턴(예: 숫자, 키워드)을 추출
  2. 필요한 데이터만 추출
    • 예제에서는 줄 안의 숫자만 추출
  3. CSV 파일(output.csv)에 저장
    • CSV 형식으로 id,value 같은 구조로 저장
  4. 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) 실행 → 별도 라이브러리 없이도 압축 가능
  • 필요에 따라 데이터 필터링 조건(숫자 외에 특정 키워드 추출)만 수정하면 다양한 로그 처리 프로그램 제작 가능

반응형

댓글