Trong hướng dẫn này, chúng ta sẽ tìm hiểu cách phân tích cú pháp các giá trị từ các tệp Giá trị được phân tách bằng dấu phẩy [CSV] bằng nhiều tiện ích tích hợp Bash khác nhau
Đầu tiên, chúng ta sẽ thảo luận về các điều kiện tiên quyết để đọc các bản ghi từ một tệp. Sau đó, chúng ta sẽ khám phá các kỹ thuật khác nhau để phân tích tệp CSV thành các biến Bash và danh sách mảng
Cuối cùng, chúng tôi sẽ kiểm tra một số công cụ của bên thứ ba để phân tích cú pháp CSV nâng cao
2. điều kiện tiên quyết
Hãy xem xét ngắn gọn các tiêu chuẩn được xác định cho tệp CSV
- Mỗi bản ghi nằm trên một dòng riêng biệt, được phân cách bằng dấu ngắt dòng
- Bản ghi cuối cùng trong tệp có thể hoặc không thể kết thúc bằng ngắt dòng
- Có thể có một dòng tiêu đề tùy chọn xuất hiện dưới dạng dòng đầu tiên của tệp có cùng định dạng với các dòng bản ghi thông thường
- Trong tiêu đề và bản ghi, có thể có một hoặc nhiều trường được phân tách bằng dấu phẩy
- Các trường chứa dấu ngắt dòng, dấu ngoặc kép và dấu phẩy phải được đặt trong dấu ngoặc kép
- Nếu dấu ngoặc kép được sử dụng để bao quanh các trường, thì dấu ngoặc kép xuất hiện bên trong trường phải được thoát bằng cách đặt trước nó bằng một dấu ngoặc kép khác
Các tệp CSV chứa các bản ghi có dấu phẩy hoặc ngắt dòng trong các chuỗi được trích dẫn không thuộc phạm vi của chúng tôi;
Bây giờ, hãy thiết lập tệp CSV mẫu tiêu chuẩn của chúng tôi
$ cat input.csv
SNo,Quantity,Price,Value
1,2,20,40
2,5,10,50
2. 1. Đọc bản ghi từ một tệp
Chúng tôi sẽ chạy một ví dụ để đọc các bản ghi từ tệp đầu vào của chúng tôi
#!/bin/bash
while read line
do
echo "Record is : $line"
done < input.csv
Ở đây, chúng tôi đã sử dụng lệnh đọc để đọc các bản ghi được phân tách bằng dấu ngắt dòng [\n] của tệp CSV của chúng tôi. Chúng tôi sẽ kiểm tra đầu ra từ tập lệnh của chúng tôi
Record is : SNo,Quantity,Price,Value
Record is : 1,2,20,40
Record is : 2,5,10,50
Như chúng ta có thể thấy, có một sự phức tạp; . Vì vậy, hãy đi sâu vào các giải pháp
2. 2. Bỏ qua dòng tiêu đề
Chúng tôi sẽ chạy một ví dụ khác để loại trừ dòng tiêu đề khỏi đầu ra
#!/bin/bash
while read line
do
echo "Record is : $line"
done <