Sử dụng `less` để xem dữ liệu được liên kết bằng dấu phẩy


7

Tôi có một tệp CSV lớn .

Tôi muốn xem tệp của mình bằng cách sử dụng lesshoặc một số lệnh như nó không phải đọc toàn bộ tệp cùng một lúc để hiển thị cho tôi một phần của tệp.

Có một lệnh ngoài đó có thể hiển thị cho tôi tệp của tôi trong các cột được liên kết bằng dấu phẩy không?


1
Tôi nhận thấy một vấn đề ở đây: bạn muốn có chế độ xem được liên kết bằng dấu phẩy, nhưng đồng thời muốn chương trình không đọc toàn bộ tệp ... Nhưng để hiển thị dữ liệu được căn chỉnh chính xác, chương trình sẽ phải đọc qua tập tin để xác định chiều rộng tối đa của một cột!
rozcietrzewiacz

Tôi nghĩ về điều đó, nhưng tôi không thấy đó là một trở ngại. Mỗi lần chỉ có một phần cố định của tệp có thể xem được và tôi không quan tâm lắm nếu các cột điều chỉnh kích thước của chúng một cách linh hoạt. Hoặc là, hoặc có lẽ bất kể chương trình ma thuật này là gì, bạn nhấn một phím và nó sẽ được điều chỉnh lại.
Richard

Đó là, @rozcietrzewiacz, rằng, với mục đích xem, chỉ có cực đại địa phương là quan trọng. Đặc biệt là nếu bạn nhớ mức tối đa cục bộ lớn nhất bạn từng thấy, nó sẽ có xu hướng tối đa toàn cầu.
Richard


Thật vậy, @enzotib. Tôi đã nghĩ rằng điều này không phù hợp với stackoverflow ban đầu, nhưng những người khác quay lại đó dường như ngụ ý rằng nó là như vậy.
Richard

Câu trả lời:


7

Tôi không chắc là nó có đủ cho bạn không, nhưng bạn có thể sử dụng columnchương trình và đọc các phần được chọn của tệp bằng cách sử dụng headvà / hoặc tailnhư thế này:

 head -n 300 myfile.csv | tail -n 100 | column -ts ',' | less
 head -n-300 myfile.csv | head -n 100 | column -ts ',' | less

Bạn có thể gói nó trong một số tập lệnh để xem các phần khác nhau của tệp tại một thời điểm (có thể không có lesssau đó). Ngoài ra, tôi e rằng sẽ chỉ có vấn đề khi chỉ sử dụng các công cụ GNU cho công việc.


Theo kinh nghiệm của tôi, ít hơn không cố gắng đọc toàn bộ tệp theo mặc định, vì vậy đơn giản là colum -ts ',' myfile.csv | lessnên hoạt động.
Klox

3
lessrõ ràng là không, nhưng columnkhông - vì vậy nó không phải là một giải pháp tốt ...
rozcietrzewiacz

1
Xem thêm 'man cut' để chỉ xem các cột cụ thể, ví dụ: cut -d',' -f1,4-6sẽ chỉ trả về các cột 1,4,5 và 6
symcbean

3

Sử dụng lessnhưng khi bạn muốn xem cột dữ liệu CSV được căn chỉnh, hãy chuyển trang hiện tại thông qua column -ts ,lệnh:

       | <m> shell-lệnh
              <m> đại diện cho bất kỳ chữ cái đánh dấu. Ống một phần của đầu vào
              tập tin vào lệnh shell đã cho. Phần của tệp sẽ là
              đường ống nằm giữa dòng đầu tiên trên màn hình hiện tại và
              vị trí được đánh dấu bằng chữ cái. cũng có thể là ^ hoặc $ để chỉ
              cate đầu hoặc cuối tập tin tương ứng. Nếu là . hoặc mới-
              dòng, màn hình hiện tại được đường ống.

       m Theo sau bởi bất kỳ chữ cái viết thường, đánh dấu vị trí hiện tại
              với lá thư đó.

nên sử dụng |.column -ts ,trongless


2

Tôi đã có trải nghiệm tốt với tabviewnó, mặc dù không phải lúc nào nó cũng hoạt động tốt với các tệp lớn. Tuy nhiên, kết hợp với headnó khá tốt.


Chương trình này là tuyệt vời. Tôi không thể chấp nhận câu trả lời này vì tôi đã hỏi về các tệp lớn, nhưng tôi sẽ nâng cao hơn nếu tôi có thể :-)
Richard

0

Đây thực sự không phải là một câu hỏi khó, nhưng trong mọi trường hợp, tôi khuyên bạn nên sử dụng một cái gì đó khác với lessđể xem các tệp csv. Nó không thực sự là công cụ phù hợp. Hãy thử một cái gì đó như R, có hỗ trợ tốt để xem và nếu cần, làm việc với các tệp CSV. Ví dụ: để đọc 5 hàng của tệp csv, hãy làm

$ R
> read.csv("pheno.csv",nrows=5)
  faid   expid pid mid sex pheno
1 1420 NA12003   0   0   1     0
2 1420 NA12004   0   0   2     0
3 1420 NA10838   9  10   1     0
4 1420 NA12005   0   0   1     0
5 1420 NA12006   0   0   2     0

Xem

> help(read.csv)

để được giúp đỡ. Xem thêm

> help(write.csv)

để ghi vào một tập tin, vv

EDIT: Tôi tình cờ có một tệp csv là 1.1G và dài 934991 dòng.

$ time Rscript -e 'read.csv("GenomeWideSNP_6.na29.annot.csv", skip=500000, nrows=5, header=FALSE)'

Điều này bỏ qua 500.000 dòng và đọc 5 dòng. R mất 1 phút để trả lại cái này và đạt được mức sử dụng 620M (!) Có vẻ như nó có thể đang đọc các dòng bị bỏ qua vào bộ nhớ, mặc dù điều đó không có ý nghĩa gì.

Kết quả cuối cùng: Tôi không thực sự là một người hâm mộ R, nhưng để xử lý các tập dữ liệu vừa và nhỏ, đặc biệt nếu bạn muốn phân tích thống kê về nó, bạn có thể làm điều tồi tệ hơn R. Một thay thế là Python và một số thư viện xử lý csv.


R có thể là tuyệt vời nhưng nó có phải là công cụ phù hợp để chỉ xem 20 hàng giữa của tệp CSV 100.000 hàng không? Câu hỏi tìm kiếm một chương trình đầu tiên không tải toàn bộ tệp vào bộ nhớ.
RedGrittyBrick

@RedGrittyBrick: Điểm hợp lý. Xem thêm ví dụ. Sử dụng bộ nhớ của R trong trường hợp này là các loại hạt. Vì lý do này, nếu việc sử dụng bộ nhớ là mối quan tâm, Python hoặc Perl có thể tốt hơn. Họ cũng có thể sẽ nhanh hơn.
Faheem Mitha
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.