Tôi có một vấn đề nhỏ. Tôi muốn chia một dòng tại mỗi ký tự ống tìm thấy bằng cách sử dụng toán tử phân chia. Giống như trong ví dụ này.tách trên ký tự ống trong perl
echo "000001d17757274585d28f3e405e75ed|||||||||||1||||||||||||||||||||||||" | \
perl -ane '$data = $_ ; chop $data ; @d = split(/\|/ , $data) ; print $#d+1,"\n" ;'
Tôi mong chờ một ouput của 36 như awk
tách với delimiter |
trở 36, nhưng thay vào đó tôi nhận được 12, như thể chia dừng lại ở 1
nhân vật trong dòng.
echo "000001d17757274585d28f3e405e75ed|||||||||||1|||||||||||||||||||||||||||||||||||||||" | \
awk -F"|" '{print NF}'
Bất kỳ ý tưởng nào. Tôi đã thử nhiều cách để trích dẫn số |
, nhưng không thành công. Rất cám ơn trước.
Vì vậy, cảm ơn nhiều. Tôi đã thực hiện loại phân chia này rất nhiều lần và không bao giờ rơi vào cái bẫy này trước đây. – saudic
+1 - Hầu hết mọi người không nhận ra điều này cho đến khi họ chạy vào hoàn cảnh chính xác này và họ kiểm tra. Theo lập trình, nó không có sự khác biệt. Nếu tôi muốn kiểm tra liệu một giá trị được định nghĩa 'if (được định nghĩa $ my_array [$ field])' sẽ hoạt động có hay không có một mục '$ my_array [$ field]' có giá trị không xác định hoặc không có trường nào được xác định '$ my_array [$ field]'. –
"Có lập trình", có những khác biệt rất lớn. ví dụ. 'for (@myarray)', 'join ($ sep, @myarray)', v.v. – ikegami