ตัวแสดง 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.