วิธีแสดง TSV (csv) ในคอนโซลเมื่อไม่พบเซลล์ว่าง: `column -t -s $ '\ t' '


12

ฉันมีไฟล์ที่มีคอลัมน์ spearated tabกับ

ฉันมีไฟล์เมื่อบางแถวมีเซลล์ว่าง (ที่จุดเริ่มต้นตรงกลาง)

ในกรณีดังกล่าวcolumn -t -s $'\t'ก็ล้มเหลว:

การป้อนข้อมูล:

$ echo -e 'A\tB\tC\tD\n\tb1\t\td1\n\t\t\td2\na3\t\t\td3' > in.tsv
$ hexdump -C in.tsv 
00000000  41 09 42 09 43 09 44 0a  09 62 31 09 09 64 31 0a  |A.B.C.D..b1..d1.|
00000010  09 09 09 64 32 0a 61 33  09 09 09 64 33 0a        |...d2.a3...d3.|
0000001e

เอาท์พุทคอลัมน์:

$ cat in.tsv | column -t -s $'\t'
A   B   C  D
b1  d1
d2
a3  d3

แทน:

A       B       C       D
        b1              d1
                        d2
a3                      d3

คุณสามารถแนะนำวิธีการฟอร์แมตบรรทัดคำสั่ง TSV ได้อย่างไร (ในทาง Unix ฉันต้องการไปป์เอาท์พุทของโปรแกรมเป็น formatter เช่นcolumn)

มีวิธีการ "แก้ไข" columnวิธีใด? อาจเป็นเครื่องมืออีกอย่าง?

คำตอบ:


12

คุณสามารถใช้ Debian columnได้ มันมีตัวเลือก-nที่ทำให้มันทำงานตรงตามที่คุณต้องการ

หรือคุณสามารถใส่ช่องว่างในคอลัมน์ว่างโดยใช้sed:

sed ':x s/\(^\|\t\)\t/\1 \t/; t x' < in.tsv | column -t -s $'\t'

ตัวอย่าง:

$ sed ':x s/\(^\|\t\)\t/\1 \t/; t x' < in.tsv | column -t -s $'\t'
A   B   C  D
    b1     d1
           d2
a3         d3

ฉันกลัวว่าความประพฤติจะเปลี่ยนไปด้วย '^ \ | \ t' ... เนื่องจาก '^' ไม่ได้ระบุอะตอม (ดังนั้นจะแทนที่\1ด้วยสตริงที่ว่างเปล่า?
Grzegorz Wierzowiecki

ใช่\(^\)เพียงอย่างเดียวจับคู่สตริงที่ว่างเปล่ายึดกับจุดเริ่มต้นของบรรทัด \1"สร้างสำเนา" ของสตริงว่างนั้น
กัส

0
sed 's/||/| |/g;s/||/| |/g' filename-here

คำสั่งด้านบนใช้สำหรับไปป์ดังนั้นแทนที่ด้วย tabspace

คุณเพียงแค่ต้องแทนที่คอลัมน์ว่างด้วยช่องว่างและไพพ์เอาต์พุตเป็นคำสั่งที่คุณใช้อยู่

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