You are a helpful assistant.
system
Thực hiện một tập lệnh Bash phân tích cẩn thận các loại tệp nhật ký khác nhau, chẳng hạn như nhật ký hệ thống và nhật ký ứng dụng, đồng thời tạo báo cáo tóm tắt chi tiết ở định dạng được chỉ định như CSV hoặc JSON, đảm bảo tích hợp xử lý lỗi, quản lý các trường hợp biên và các nhận xét liên quan để làm rõ.
user
Để thực hiện một tập lệnh Bash phân tích các loại tệp nhật ký khác nhau và tạo báo cáo tóm tắt, bạn có thể làm theo hướng dẫn dưới đây. Tập lệnh này sẽ đọc các tệp nhật ký, phân tích chúng và xuất ra báo cáo ở định dạng CSV hoặc JSON. Tập lệnh cũng sẽ bao gồm xử lý lỗi và các nhận xét để giải thích từng phần.

```bash
#!/bin/bash

# Hàm để phân tích nhật ký hệ thống
parse_syslog() {
    local logfile=$1
    local output_format=$2
    local output_file=$3

    echo "Đang phân tích nhật ký hệ thống từ $logfile..."

    # Kiểm tra tệp nhật ký có tồn tại không
    if [[ ! -f $logfile ]]; then
        echo "Lỗi: Tệp nhật ký $logfile không tồn tại."
        exit 1
    fi

    # Đếm số lượng mỗi loại thông báo (INFO, WARNING, ERROR)
    local info_count=$(grep -c "INFO" $logfile)
    local warning_count=$(grep -c "WARNING" $logfile)
    local error_count=$(grep -c "ERROR" $logfile)

    # Tạo báo cáo
    if [[ $output_format == "csv" ]]; then
        echo "type,count" > $output_file
        echo "INFO,$info_count" >> $output_file
        echo "WARNING,$warning_count" >> $output_file
        echo "ERROR,$error_count" >> $output_file
    elif [[ $output_format == "json" ]]; then
        echo "{" > $output_file
        echo "  \"INFO\": $info_count," >> $output_file
        echo "  \"WARNING\": $warning_count," >> $output_file
        echo "  \"ERROR\": $error_count" >> $output_file
        echo "}" >> $output_file
    else
        echo "Lỗi: Định dạng đầu ra không hợp lệ. Chỉ hỗ trợ csv hoặc json."
        exit 1
    fi

    echo "Báo cáo đã được tạo tại $output_file"
}

# Hàm để phân tích nhật ký ứng dụng
parse_applog() {
    local logfile=$1
    local output_format=$2
    local output_file=$3

    echo "Đang phân tích nhật ký ứng dụng từ $logfile..."

    # Kiểm tra tệp nhật ký có tồn tại không
    if [[ ! -f $logfile ]]; then
        echo "Lỗi: Tệp nhật ký $logfile không tồn tại."
        exit 1
    fi

    # Đếm số lượng mỗi loại thông báo (DEBUG, INFO, ERROR)
    local debug_count=$(grep -c "DEBUG" $logfile)
    local info_count=$(grep -c "INFO" $logfile)
    local error_count=$(grep -c "ERROR" $logfile)

    # Tạo báo cáo
    if [[ $output_format == "csv" ]]; then
        echo "type,count" > $output_file
        echo "DEBUG,$debug_count" >> $output_file
        echo "INFO,$info_count" >> $output_file
        echo "ERROR,$error_count" >> $output_file
    elif [[ $output_format == "json" ]]; then
        echo "{" > $output_file
        echo "  \"DEBUG\": $debug_count," >> $output_file
        echo "  \"INFO\": $info_count," >> $output_file
        echo "  \"ERROR\": $error_count" >> $output_file
        echo "}" >> $output_file
    else
        echo "Lỗi: Định dạng đầu ra không hợp lệ. Chỉ hỗ trợ csv hoặc json."
        exit 1
    fi

    echo "Báo cáo đã được tạo tại $output_file"
}

# Kiểm tra số lượng tham số
if [[ $# -ne 4 ]]; then
    echo "Sử dụng: $0 <loại_nhật_ký> <tệp_nhật_ký> <định_dạng_đầu_ra> <tệp_đầu_ra>"
    echo "Loại nhật ký: syslog hoặc applog"
    echo "Định dạng đầu ra: csv hoặc json"
    exit 1
fi

# Lấy tham số từ dòng lệnh
log_type=$1
log_file=$2
output_format=$3
output_file=$4

# Gọi hàm phân tích tương ứng
case $log_type in
    syslog)
        parse_syslog $log_file $output_format $output_file
        ;;
    applog)
        parse_applog $log_file $output_format $output_file
        ;;
    *)
        echo "Lỗi: Loại nhật ký không hợp lệ. Chỉ hỗ trợ syslog hoặc applog."
        exit 1
        ;;
esac
```

### Hướng dẫn sử dụng:
- Lưu tập lệnh trên vào một tệp, ví dụ `log_parser.sh`.
- Đảm bảo tệp có quyền thực thi: `chmod +x log_parser.sh`.
- Chạy tập lệnh với cú pháp: `./log_parser.sh <loại_nhật_ký> <tệp_nhật_ký> <định_dạng_đầu_ra> <tệp_đầu_ra>`.
  - `<loại_nhật_ký>`: `syslog` hoặc `applog`.
  - `<tệp_nhật_ký>`: Đường dẫn đến tệp nhật ký cần phân tích.
  - `<định_dạng_đầu_ra>`: `csv` hoặc `json`.
  - `<tệp_đầu_ra>`: Đường dẫn đến tệp báo cáo sẽ được tạo.
assistant