ตัวแสดง CSV บรรทัดคำสั่ง? [ปิด]


308

มีใครรู้บ้างเกี่ยวกับโปรแกรมดูไฟล์ CSV สำหรับ Linux / OS X ฉันกำลังคิดถึงบางสิ่งที่คล้ายกันlessแต่จะทำให้มีการเว้นคอลัมน์ในลักษณะที่อ่านง่ายขึ้น (ฉันไม่เป็นไรเมื่อเปิดด้วย OpenOffice Calc หรือ Excel แต่นั่นเป็นวิธีที่เกินกำลังเกินกว่าที่จะดูข้อมูลอย่างที่ฉันต้องการ) การเลื่อนแนวนอนและแนวตั้งนั้นยอดเยี่ยม


เนื่องจากฉันไม่สามารถให้คำตอบได้: SC-IM เป็นเครื่องมือดูและแก้ไข CLI สำหรับตารางที่ยังสามารถเปิด CSV ได้ github.com/andmarti1424/sc-im
12431234123412341234123

คำตอบ:


441

คุณสามารถใช้สิ่งนี้:

column -s, -t < somefile.csv | less -#2 -N -S

column เป็นโปรแกรมยูนิกซ์มาตรฐานที่สะดวกมาก - ค้นหาความกว้างที่เหมาะสมของแต่ละคอลัมน์และแสดงข้อความเป็นตารางที่จัดรูปแบบได้ดี

หมายเหตุ: เมื่อใดก็ตามที่คุณมีช่องว่างคุณต้องใส่ตัวยึดบางอย่างไว้มิฉะนั้นคอลัมน์จะถูกรวมเข้ากับคอลัมน์ต่อไปนี้ ตัวอย่างต่อไปนี้สาธิตวิธีใช้sedแทรกตัวยึดตำแหน่ง:

$ cat data.csv
1,2,3,4,5
1,,,,5
$ sed 's/,,/, ,/g;s/,,/, ,/g' data.csv | column -s, -t
1  2  3  4  5
1           5
$ cat data.csv
1,2,3,4,5
1,,,,5
$ column -s, -t < data.csv
1  2  3  4  5
1  5
$ sed 's/,,/, ,/g;s/,,/, ,/g' data.csv | column -s, -t
1  2  3  4  5
1           5

โปรดทราบว่าการแทนที่ด้วย,,for , ,ทำได้สองครั้ง หากคุณทำเพียงครั้งเดียว1,,,4จะกลายเป็น1, ,,4เพราะจุลภาคที่สองถูกจับคู่แล้ว


2
ผมชอบตัวเลือกนี้ - columnมันเป็นเรื่องดีที่รู้เกี่ยวกับ ฉันลงเอยด้วยการทำสคริปต์เชลล์แบบสั้น (ส่วนใหญ่จะเป็นสำเร็จรูป "ฉันจะใช้งานได้อย่างไร" และตรวจสอบรหัสข้อผิดพลาด) github.com/benjaminoakes/utilities/blob/master/view-csv
Benjamin Oakes

24
คอลัมน์เวอร์ชัน 'Debian GNU / Linux' มีตัวเลือก '-n': "โดยค่าเริ่มต้นคำสั่งคอลัมน์จะรวมตัวคั่นหลายตัวที่อยู่ติดกันเป็นตัวคั่นเดียวเมื่อใช้ตัวเลือก -t ตัวเลือกนี้จะปิดการใช้งานตัวเลือกนี้คือ ส่วนขยาย Debian GNU / Linux "
klokop

5
ดูเหมือนจะแตกถ้าคุณมีค่าคอลัมน์ (ที่ยกมา) ด้วยเครื่องหมายจุลภาคในพวกเขา ความคิดวิธีการแก้ไขปัญหานี้?
TM

3
จากman column:-n By default, the column command will merge multiple adjacent delimiters into a single delimiter when using the -t option; this option disables that behavior. This option is a Debian GNU/Linux extension.
ezdazuzena

8
น่าเสียดายถ้าค่ามีเครื่องหมายจุลภาคมันจะถูกแบ่งแม้ว่าจะมีการเสนอราคา
ffarquet

107

คุณสามารถติดตั้งcsvtool(บน Ubuntu) ผ่านทาง

sudo apt-get install csvtool

จากนั้นเรียกใช้:

csvtool readable filename | view -

สิ่งนี้จะทำให้มันดีและสวยภายในอินสแตนซ์ vim แบบอ่านอย่างเดียวแม้ว่าคุณจะมีบางเซลล์ที่มีค่ายาวมาก


2
สำหรับผู้ที่ไม่ได้อยู่ใน Distros Debian ฐานเครื่องมือนี้ดูเหมือนว่ามาจากที่นี่: docs.camlcity.org/docs/godisrc/ocaml-csv-1.1.6.tar.gz ขออภัยลิงก์ "โฮมเพจ" นั้นตายแล้วและฉันไม่ได้ ดูวิธีง่ายๆในการดาวน์โหลดไฟล์เก็บถาวรทั้งหมดในระหว่างเดินทาง
cincodenada

9
เครื่องมือไม่สามารถจัดการไฟล์ด้วย 100Mb +
PedroSena

6
เครื่องมือนี้มีให้ในocaml-csvแพ็คเกจbaseสำหรับฉันใน Centos7
Bryce Guinta

72

ดูที่csvkit csvkitมันมีชุดเครื่องมือที่เป็นไปตามปรัชญาของ UNIX (หมายถึงมันมีขนาดเล็กเรียบง่ายมีจุดประสงค์เดียวและสามารถรวมกันได้)

นี่คือตัวอย่างที่แยกเมืองที่มีประชากรมากที่สุดสิบแห่งในเยอรมนีจากฐานข้อมูล Maxmind World Citiesฟรีและแสดงผลลัพธ์ในรูปแบบที่สามารถอ่านได้ในคอนโซล:

$ csvgrep -e iso-8859-1 -c 1 -m "de" worldcitiespop | csvgrep -c 5 -r "\d+" 
  | csvsort -r -c 5 -l | csvcut -c 1,2,4,6 | head -n 11 | csvlook
-----------------------------------------------------
|  line_number | Country | AccentCity | Population  |
-----------------------------------------------------
|  1           | de      | Berlin     | 3398362     |
|  2           | de      | Hamburg    | 1733846     |
|  3           | de      | Munich     | 1246133     |
|  4           | de      | Cologne    | 968823      |
|  5           | de      | Frankfurt  | 648034      |
|  6           | de      | Dortmund   | 594255      |
|  7           | de      | Stuttgart  | 591688      |
|  8           | de      | Düsseldorf | 577139      |
|  9           | de      | Essen      | 576914      |
|  10          | de      | Bremen     | 546429      |
-----------------------------------------------------

Csvkit เป็นแพลตฟอร์มอิสระเพราะเขียนใน Python


1
ใช้งานได้ดีบน MAC ของฉัน มีประโยชน์มากสำหรับการอ่านไฟล์ขนาดใหญ่
James Lim

4
ฉันชอบ Csvkit csvlook <filename.csv> | less -S
Sandeep

5
ที่จะได้รับ csvkit pip install csvkitคุณก็สามารถจุดติดตั้ง: สนุก!
gloriphobia

46

Tabview: โปรแกรมดูไฟล์ CSV ไฟล์คำสั่ง python curses แบบเบา (และข้อมูล Python แบบตารางอื่น ๆ เช่นรายการ) Github

คุณสมบัติ:

  • Python 2.7+, 3.x
  • รองรับ Unicode
  • มุมมองคล้ายสเปรดชีตสำหรับการแสดงข้อมูลตารางอย่างง่ายดาย
  • การนำทางที่เหมือน Vim (h, j, k, l, g (บนสุด), G (ด้านล่าง), 12G goto line 12, m - เครื่องหมาย, '- goto mark, ฯลฯ )
  • สลับแถวส่วนหัวถาวร
  • ปรับขนาดความกว้างและช่องว่างของคอลัมน์แบบไดนามิก
  • จัดเรียงจากน้อยไปมากหรือจากมากไปน้อยด้วยคอลัมน์ใด ๆ เรียงลำดับตามธรรมชาติสำหรับค่าตัวเลข
  • การค้นหาข้อความแบบเต็ม n และ p เพื่อสลับไปมาระหว่างผลการค้นหา
  • 'Enter' เพื่อดูเนื้อหาของเซลล์แบบเต็ม
  • งัดเนื้อหาของเซลล์ไปยังคลิปบอร์ด
  • F1 หรือ สำหรับการโยงคีย์
  • ยังสามารถใช้จากบรรทัดคำสั่ง python เพื่อแสดงภาพข้อมูลแบบตารางใด ๆ (เช่น list-of-list)

1
เครื่องมือที่ยอดเยี่ยม เปิดไฟล์ขนาดใหญ่ที่ทำให้ csvtool และ openoffice ขัดข้อง เร็วมากเช่นกัน
Leonardo

หลังจาก 'pipview tabview' บน windows สำเร็จฉันจะเปิดโปรแกรมได้อย่างไร ฉันสามารถใช้ 'tabview file.csv' บน linux ได้สำเร็จ แต่ดูเหมือนว่า Windows จะไม่ทำงาน ขอบคุณ!
Chris

ฉันไม่เชื่อว่าโมดูล curses นั้นมีอยู่ใน Windows ขออภัย! อาจมีโมดูลของบุคคลที่สาม แต่ฉันไม่ได้ทำการพัฒนาใด ๆ สำหรับ Windows
Scott Hansen

ขอบคุณสำหรับคำอธิบาย! มันเป็นเครื่องมือที่ยอดเยี่ยมหลังจากนั้น!
Chris

1
@CiroSantilli 烏坎事件 2016 六四事件法轮功ขออภัยยังไม่ได้ ฉันหวังว่าจะใช้เวลาสักครู่ใน tabview เร็ว ๆ นี้ ... มันค่อนข้างเฉย ๆ สักครู่ที่นี่ :(
Scott Hansen


22

แพ็คเกจnodejs tecfu / tty-tableสามารถติดตั้งแบบโกลบอลเพื่อทำสิ่งนี้:

apt-get install nodejs
npm i -g tty-table
cat data.csv | tty-table

tecfu / TTY ตาราง

นอกจากนี้ยังสามารถจัดการกระแส

สำหรับข้อมูลเพิ่มเติมโปรดดูที่เอกสารสำหรับการใช้งานเทอร์มินี่


1
กรุณาทิ้งเหตุผลถ้าคุณลงคะแนน แพ็คเกจนี้ใช้งานได้ดี
user3751385

9
nodejs เป็นแพลตฟอร์มเว็บเซิร์ฟเวอร์ คุณไม่ควรแนะนำคนที่จะตัดขนมปังด้วยเลื่อยไฟฟ้า
สูงสุด

23
node เป็นระบบสคริปต์วัตถุประสงค์ทั่วไปที่มีการเชื่อม CLI นั้นแตกต่างจากการใช้ perl one-liner หรืออะไรบางอย่างจาก CPAN อย่างไร
Racheet

ฉันชอบตัวเลือกนี้จริง ๆ แต่เมื่อฉันลดขนาดให้น้อยลงมันดูไม่ถูก คุณรู้หรือไม่ว่าจำเป็นต้องมีบางสิ่งที่พิเศษเพื่อให้ใช้งานได้น้อยลง
plafratt

แพ็กเกจนี้แบ่งหากไฟล์มีหลายคอลัมน์ (โดยเฉพาะอย่างยิ่งมากกว่าความกว้างแนวนอนของหน้าจอเทอร์มินัลสามารถจัดการได้) และไม่ได้จัดแนวอย่างเหมาะสมหลังจากนั้น
ghent

10

xsvเป็นมากกว่าผู้ดู ฉันแนะนำสำหรับงาน CSV ส่วนใหญ่ในบรรทัดคำสั่งโดยเฉพาะเมื่อจัดการกับชุดข้อมูลขนาดใหญ่


9

CSVfixโครงการ FOSS ของฉันอนุญาตให้คุณแสดงไฟล์ CSV ในรูปแบบตาราง "ASCII art"


สิ่งที่ฉันกำลังมองหา ฉันจะต้องพยายามรวบรวมสำหรับ OS X (คุณอาจมีแพทช์บางมาทางของคุณที่รู้ ... )
เบนจามินเคส

ฉันยินดีต้อนรับพวกเขาเป็นอย่างมาก หนึ่งในแง่มุมที่น่าผิดหวังเล็กน้อยของโครงการ FOSS คือมีเพียงไม่กี่คนที่มีส่วนร่วมในรหัส แน่นอนฉันมีความผิดในเรื่องนี้ในฐานะบุคคลต่อไป

ทำไมโครงการ CSVfix ของคุณไม่อนุญาตให้เรียกดู repo การทำให้ผู้อื่นมองเห็นรหัสยากขึ้นไม่ได้ทำให้คุณมีส่วนร่วมมากขึ้นใช่ไหม?
Dirk Eddelbuettel

1
ความเกียจคร้านที่แท้จริงในส่วนของฉันฉันกลัว นอกจากนี้การระบุรหัสไปรษณีย์หมายความว่าทุกคนสามารถรับได้ - ถ้าฉันให้การเข้าถึง repo คนจะต้องติดตั้ง SVM หรือ Hg ถ้าฉันเริ่มได้รับแพทช์ฉันจะพิจารณาอีกครั้ง

ส่งมอบล่าสุดเมื่อวันที่ 2015‑02‑28
Boris

8

คำตอบของ Ofri ให้ทุกสิ่งที่คุณต้องการ แต่ .. หากคุณไม่ต้องการจดจำคำสั่งคุณสามารถเพิ่มคำสั่งนี้ลงใน ~ / .bashrc (หรือเทียบเท่า):

csview()
{
local file="$1"
sed "s/,/\t/g" "$file" | less -S
}

ตรงนี้เหมือนกับคำตอบของ Ofri ยกเว้นฉันได้ห่อไว้ในฟังก์ชันเชลล์และใช้less -Sตัวเลือกเพื่อหยุดการตัดบรรทัดlessตัดเส้นหน้าที่คล้ายกับสำนักงาน / oocalc)

เปิดเชลล์ใหม่ (หรือพิมพ์source ~/.bashrcในเชลล์ปัจจุบันของคุณ) และเรียกใช้คำสั่งโดยใช้:

csview <filename>


5
สิ่งนี้ไม่จัดการเครื่องหมายจุลภาคในการเสนอราคา
เฉิง

7

ฉันใช้คำตอบของ pisswillis มานาน

csview()
{
    local file="$1"
    sed "s/,/\t/g" "$file" | less -S
}

แต่เมื่อรวมรหัสบางอย่างที่ฉันพบที่http://chrisjean.com/2011/06/17/view-csv-data-from-the-command-lineซึ่งทำงานได้ดีกว่าสำหรับฉัน:

csview()
{
    local file="$1"
    cat "$file" | sed -e 's/,,/, ,/g' | column -s, -t | less -#5 -N -S
}

เหตุผลที่มันใช้งานได้ดีกว่าสำหรับฉันก็คือมันรองรับคอลัมน์ที่กว้างกว่าได้ดีกว่า



3

นี่คือตัวเลือกง่าย ๆ (น่าจะเกินไป):

sed "s/,/\t/g" filename.csv | less

2
นั่นคือความชอบครั้งแรกของฉันเช่นกัน แต่คุณต้องแทรกแท็บให้มากพอเพื่อให้ตรงกับค่าที่ยาวที่สุดสำหรับคอลัมน์ของคุณ ... เริ่มมีความซับซ้อนเล็กน้อยและฉันคิดว่า "มีคนอื่นต้องทำสิ่งนี้แล้ว
45432 Benjamin Oakes

2
คุณไม่สนใจความจริงที่ว่าเครื่องหมายจุลภาคอาจถูกยกมาดังนั้นจึงไม่ใช่ตัวคั่น (เหนือสิ่งอื่นใด)
Ariel Allon

3

อีก CSV อเนกประสงค์ (และไม่เท่านั้น) เครื่องมือการจัดการ: มิลเลอร์ จากคำอธิบายของตัวเองมันเป็นเหมือน awk, sed, cut, join และเรียงลำดับสำหรับข้อมูลที่จัดทำดัชนีชื่อเช่น CSV, TSV และ JSON แบบตาราง (ลิงก์ไปยังที่เก็บ github: https://github.com/johnkerl/miller )


2

ฉันเขียน csv_view.sh นี้เพื่อจัดรูปแบบ CSVs จากบรรทัดคำสั่งนี้จะอ่านไฟล์ทั้งหมดเพื่อหาความกว้างที่เหมาะสมที่สุดของแต่ละคอลัมน์ (ต้องใช้ Perl สมมติว่าไม่มีเครื่องหมายจุลภาคในฟิลด์และใช้น้อยกว่า):


#!/bin/bash

perl -we '
  sub max( @ ) {
    my $max = shift;

    map { $max = $_ if $_ > $max } @_;
    return $max;
  }

  sub transpose( @ ) {
    my @matrix = @_;
    my $width  = scalar @{ $matrix[ 0 ] };
    my $height = scalar @matrix;

    return map { my $x = $_; [ map { $matrix[ $_ ][ $x ] } 0 .. $height - 1 ] } 0 .. $width - 1;
  }

  # Read all lines, as arrays of fields
  my @lines = map { s/\r?\n$//; [ split /,/ ] } ;

  my $widths =
    # Build a pack expression based on column lengths
    join "",

    # For each column get the longest length plus 1
    map { 'A' . ( 1 + max map { length } @$_ ) }

    # Get arrays of columns
    transpose

    @lines
  ;

  # Format all lines with pack
  map { print pack( $widths, @$_ ) . "\n" } @lines;
' $1 | less -NS


2

ใช้TxtSushiคุณสามารถทำได้:

csvtopretty filename.csv | less -S

Downvote สำหรับการไม่เป็นขั้นตอนการติดตั้งหนึ่งบรรทัด ผมไม่ได้มีเวลาที่จะรวบรวม :( นี้หากคุณสามารถให้แพคเกจที่จะน่ากลัว..
masterxilo

@masterxilo นั่นไม่ใช่เหตุผลที่ถูกต้องสำหรับการลงคะแนน แพ็คเกจจำนวนมากในปัจจุบันจำเป็นต้องติดตั้งหลายขั้นตอน นอกจากนี้อาจติดตั้งเร็วกว่าเขียนความคิดเห็น
Yuval Meshorer


2

ฉันได้สร้างtablignเพื่อวัตถุประสงค์เหล่านี้ (และอื่น ๆ ) ติดตั้งด้วย

[sudo -H] pip3 install tablign

และ

$ cat test.csv
Header1,Header2,Header3
Pizza,Artichoke dip,Bob's Special of the Day
BLT,Ham on rye with the works,
$ tablign test.csv
Header1 , Header2                   , Header3
Pizza   , Artichoke dip             , Bob's Special of the Day
BLT     , Ham on rye with the works ,

ใช้งานได้หากข้อมูลถูกคั่นด้วยอย่างอื่นที่ไม่ใช่เครื่องหมายจุลภาค ที่สำคัญที่สุดคือมันรักษาตัวคั่นไว้เพื่อให้คุณสามารถใช้ในการจัดตาราง ASCII ของคุณโดยไม่ต้องละทิ้งไวยากรณ์ [Markdown, CSV, LaTeX] ของคุณ


Collecting tablify Could not find a version that satisfies the requirement tablify (from versions: ) No matching distribution found for tablify
masterxilo

@masterxilo tablignฉันมันเปลี่ยนไป แก้ไขในคำอธิบาย
Nico Schlömer

1
สมบูรณ์แบบใช้งานได้
masterxilo

0

ฉันเขียนสคริปต์viewtabใน Groovy เพื่อจุดประสงค์นี้เท่านั้น คุณเรียกใช้เช่น:

viewtab filename.csv

โดยทั่วไปแล้วมันเป็นสเปรดชีตที่มีน้ำหนักเบามากที่สามารถเรียกใช้จากบรรทัดคำสั่งจัดการไฟล์ CSV และแท็บแยกกันสามารถอ่านไฟล์ขนาดใหญ่มากที่ Excel และ Numbers ติดอยู่และรวดเร็วมาก มันไม่ได้เป็นบรรทัดคำสั่งในแง่ของการเป็นข้อความเท่านั้น แต่มันเป็นแพลตฟอร์มที่เป็นอิสระและอาจจะเหมาะกับการเรียกเก็บเงินสำหรับคนจำนวนมากที่กำลังมองหาวิธีการแก้ไขปัญหาของการตรวจสอบอย่างรวดเร็วไฟล์ CSV จำนวนมากหรือใหญ่ในขณะที่ทำงานในสภาพแวดล้อมบรรทัดคำสั่ง .

สคริปต์และวิธีการติดตั้งอธิบายไว้ที่นี่:

http://bayesianconspiracy.blogspot.com/2012/06/quick-csvtab-file-viewer.html


0

มีสคริปต์บรรทัดคำสั่งสั้น ๆ ในภาษาไพ ธ อน: https://github.com/rgrp/csv2ascii/blob/master/csv2ascii.py

เพียงดาวน์โหลดและวางในเส้นทางของคุณ การใช้งานเป็นเช่น

csv2ascii.py [options] csv-file-path

แปลงไฟล์ csv csv-file-pathไปที่รูปแบบ ascii ส่งคืนผลลัพธ์ใน stdout ถ้าcsv-file-path= '-' ให้อ่านจาก stdin

ตัวเลือก:

  -h, - ช่วยแสดงข้อความช่วยเหลือนี้และออก
  -w WIDTH, - width = WIDTH
                        ความกว้างของเอาต์พุต ascii
  -c COLUMNS, - คอลัมน์ = COLUMNS
                        แสดงเฉพาะคอลัมน์จำนวนนี้
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.