Tôi có một bó toàn bộ tập tin trong một thư mục và từ mọi tập tin tôi muốn loại bỏ dòng đầu tiên (bao gồm cả vận chuyển trở lại). Tôi có thể đọc toàn bộ tập tin vào một chuỗi các chuỗi và viết tất cả, nhưng phần tử đầu tiên vào một tập tin mới, nhưng có vẻ hơi cồng kềnh với tôi là có cách nào tốt hơn? Oh ngôn ngữ ưa thích là Perl.Perl: Làm thế nào để loại bỏ dòng đầu tiên của một tập tin mà không đọc và sao chép toàn bộ tập tin
Perl: Làm thế nào để loại bỏ dòng đầu tiên của một tập tin mà không đọc và sao chép toàn bộ tập tin
Trả lời
Hãy thử điều này một liner
perl -pi -e '$_ = "" if ($. == 1);' filename
Tôi đã sử dụng nó trước, nên tất cả các bạn cần.
+1 Không bao giờ cần lưu trữ nhiều hơn một dòng tại một thời điểm. – mob
bạn có thể giải thích cách hoạt động của nó không? – FistOfFury
về cơ bản nó nói chạy perl, phân tích tại chỗ và thực thi dòng mã sau đây. Dòng sau sử dụng biến mặc định $ _ trong trường hợp này là dòng được đọc bởi tùy chọn -p. $. là số dòng của tên tệp. vì vậy nếu số dòng là == 1 thì đặt văn bản của dòng thành "". –
use Tie::File qw();
for my $filename (glob 'some_where/some_files*') {
tie my @file, 'Tie::File', $filename or die "Could not open $filename: $!";
shift @file;
}
+1 nếu chỉ cho PS của bạn. :) –
Lưu ý rằng điều này vẫn phải đọc và sao chép toàn bộ tập tin, nhưng đó là vốn có trong vấn đề. Tôi không biết bất kỳ hệ điều hành nào cung cấp bất kỳ cách nào khác để xóa dữ liệu khỏi đầu tệp. – cjm
Tie :: Tệp là lựa chọn hiển nhiên của tôi vì nó được viết rõ ràng để giải quyết vấn đề này một cách hiệu quả. – daxim
perl -n -i -e 'print unless $. == 1' myfile
Điều này tương tự câu trả lời của stocherilac.
Nhưng, trong mọi trường hợp (và trong tất cả các câu trả lời khác được đưa ra!), Bạn luôn đọc toàn bộ tệp. Không có cách nào để tránh điều đó, AFAIK.
+1 cho nhiều cách để làm điều đó :) –
+1 cho phiên bản có thể đọc được (IMHO) dễ đọc hơn. –
Trong Windows dưới giao diện điều khiển MinGW mà một trong những xóa tập tin của tôi "Không thể làm tại chỗ chỉnh sửa trên myfile: Quyền bị từ chối" – user869097
Làm thế nào về
tail +2
trong vỏ?
(chỉnh sửa: trong Linux mới hơn, bạn có thể cần tail -n +2
(cảm ơn bạn, GNU :()!)
Oh ngôn ngữ ưa thích là Perl
Đôi khi sed
là một sed
tốt hơn. thậm chí perl:
sed -i 1d *
Như được chỉ ra bởi Schwern, sau đây không thực hiện một lối ra sớm càng Ban đầu tôi đã nghĩ rằng nó sẽ:
perl -pi -e '$_ = q// and last if $. == 1;' myFile
Có vẻ như một không thể tránh xử lý toàn bộ tập tin sau khi tất cả.
Điều này không làm những gì bạn nghĩ rằng nó. Nếu nó đã làm, nó sẽ vi phạm như thế nào các tập tin làm việc trên Unix. Điều thực sự xảy ra là '$ _ =" "' luôn luôn sai nên '$ _ =" "và last' giống với' 0 và last'.Nó ngắn mạch và không bao giờ gọi 'cuối cùng'. Bạn đã viết: 'perl -pi e '$ _ = q // nếu $. == 1 'myFile' là một cách thông minh để không in dòng đầu tiên, nhưng chắc chắn nhất là đọc toàn bộ tệp. Chạy với '-MO = Deparse' để lấy mã và chạy nó trong trình gỡ rối để xem. 'do {this; cái đó; } nếu something' là một cấu trúc an toàn hơn. – Schwern
@Schwern: Tệ của tôi. Phải mất một thời gian cho lời giải thích của bạn để chìm vào, nhưng tôi thấy quan điểm của bạn. – Zaid
- 1. Làm thế nào để sử dụng Boost :: Spirit :: Lex để lex một tập tin mà không cần đọc toàn bộ tập tin vào bộ nhớ đầu tiên?
- 2. Di chuyển dòng đầu tiên từ một tập tin
- 3. Làm thế nào để sao chép Postgres bỏ qua dòng đầu tiên của tệp txt lớn
- 4. Đọc toàn bộ tập tin trong Lua
- 5. Dòng đọc Haskell của tập tin
- 6. Sao chép tập tin mà không ghi đè lên
- 7. Có cách nào suy ra định dạng hình ảnh của tập tin không, không đọc toàn bộ tập tin?
- 8. C Xóa dòng đầu tiên khỏi tập tin văn bản mà không cần viết lại tập tin
- 9. Làm thế nào để chờ đợi cho một tập tin được sao chép hoàn toàn?
- 10. Làm thế nào để tham gia vào n dòng đầu tiên trong một tập tin
- 11. Tạo một tập tin batch để sao chép và đổi tên tập tin
- 12. Làm thế nào để đọc toàn bộ tập tin trong Ruby?
- 13. Sao chép các tập tin trong khi bỏ qua các tập tin tồn tại - Unix
- 14. Làm thế nào để có được dòng đọc tập tin theo dòng
- 15. Hiệu quả của từng dòng đọc tập tin trong Python
- 16. Sao chép tập tin an toàn trên NAS Filer
- 17. java nio đọc dòng từ một tập tin
- 18. Cách đọc nội dung tập tin từ một tập tin?
- 19. Đọc tập tin plist
- 20. Perl: Xóa nội dung của tập tin và tập tin mở trong chế độ append
- 21. Làm thế nào tôi có thể đọc các dòng của một tập tin vào một mảng trong Perl?
- 22. Mở tập tin và đọc từ tập tin Objective-c
- 23. Làm thế nào để có được số dòng mà không cần đọc tập tin để kết thúc
- 24. cắt bỏ 100MB đầu tiên của một tập tin trong Linux
- 25. Làm thế nào để thêm một cột từ một tập tin vào một tập tin
- 26. Trong Python, làm thế nào tôi có thể mở một tập tin và đọc nó trên một dòng, và vẫn có thể đóng tập tin sau đó?
- 27. Làm thế nào để đọc tập tin tuần tự hadoop?
- 28. Đọc các thẻ ID3 mà không cần tải toàn bộ tập tin
- 29. Đọc từ tập tin
- 30. Làm thế nào để sao chép một tập tin PHP sử dụng PHP
Điều này là không thể vì cách lưu trữ tệp. Bạn sẽ luôn luôn phải đọc toàn bộ tập tin, và viết tất cả mọi thứ nhưng dòng đầu tiên - hệ điều hành không có cách nào khác. – Konerak