Mục đích của câu hỏi này là cung cấp câu trả lời chuẩn.Cách mạnh mẽ nhất để phân tích cú pháp CSV hiệu quả bằng awk là gì?
Cho một CSV như có thể được tạo ra bởi Excel hoặc các công cụ khác với newlines nhúng, dấu ngoặc kép nhúng và các lĩnh vực có sản phẩm nào như:
$ cat file.csv
"rec1, fld1",,"rec1"",""fld3.1
"",
fld3.2","rec1
fld4"
"rec2, fld1.1
fld1.2","rec2 fld2.1""fld2.2""fld2.3","",rec2 fld4
gì là cách mạnh mẽ nhất có hiệu quả sử dụng awk để xác định các hồ sơ và các lĩnh vực riêng biệt :
Record 1:
$1=<rec1, fld1>
$2=<>
$3=<rec1","fld3.1
",
fld3.2>
$4=<rec1
fld4>
----
Record 2:
$1=<rec2, fld1.1
fld1.2>
$2=<rec2 fld2.1"fld2.2"fld2.3>
$3=<>
$4=<rec2 fld4>
----
để nó có thể được sử dụng như những bản ghi và trường trong nội bộ phần còn lại của tập lệnh awk.
CSV hợp lệ sẽ là CSV phù hợp với RFC 4180 hoặc có thể được tạo bởi MS-Excel.
Giải pháp phải chịu đựng phần cuối của bản ghi chỉ là LF (\n
) như là điển hình cho tệp UNIX chứ không phải CRLF (\r\n
) theo tiêu chuẩn đó và Excel hoặc các công cụ Windows khác sẽ tạo. Nó cũng sẽ chấp nhận các trường không được trích dẫn được trộn lẫn với các trường được trích dẫn. Nó sẽ đặc biệt không cần phải chịu đựng được sự thoáts với dấu gạch chéo ngược trước (tức là \"
thay vì ""
) như một số định dạng CSV khác cho phép - nếu bạn có. một kịch bản sẽ làm cho kịch bản không cần thiết mong manh và phức tạp.