Mục nhập của tôi có kết hợp các tab và dấu cách để dễ đọc. Tôi muốn sửa đổi một trường bằng cách sử dụng perl -a
, sau đó in ra dòng ở dạng ban đầu của nó. (. Các dữ liệu là từ findup
, thể hiện cho tôi một số các tập tin trùng lặp và không gian mà họ lãng phí) Input là:Có thể "perl -a" bằng cách nào đó tham gia lại @F bằng cách sử dụng khoảng trắng ban đầu không?
2 * 4096 backup/photos/photo.jpg photos/photo.jpg
2 * 111276032 backup/books/book.pdf book.pdf
Kết quả sẽ chuyển đổi lĩnh vực từ 3 đến kilobyte, như thế này:
2 * 4 KB backup/photos/photo.jpg photos/photo.jpg
2 * 108668 KB backup/books/book.pdf book.pdf
trong thế giới giấc mơ của tôi, đây sẽ là mã của tôi, vì tôi chỉ có thể sẽ perl để tự động tái kết hợp @F
và giữ gìn khoảng trắng gốc:
perl -lanE '$F[2]=int($F[2]/1024)." KB"; print;'
trong thực cuộc sống, tham gia với một không gian duy nhất có vẻ như là lựa chọn duy nhất của tôi:
perl -lanE '$F[2]=int($F[2]/1024)." KB"; print join(" ", @F);'
Có biến tự động nào ghi nhớ các dấu phân tách không? Nếu tôi có một mảng ma thuật như vậy, mã sẽ là:
perl -lanE 'BEGIN{use List::Util "reduce";} $F[2]=int($F[2]/1024)." KB"; print reduce { $a . shift(@magic) . $b } @F;'
Btw, in với một không gian giữa các yếu tố: 'print "@F";' – zdim