5

Я работаю с большим количеством файлов данных с разделителями табуляции, с разными столбцами неопределенной длины.

Как правило, люди видят эти файлы, когда переносят их с сервера на компьютер с Windows или Mac, а затем открывают в Excel. Это, безусловно, полнофункциональный, позволяющий фильтровать и другие приятные опции. Но иногда, вы просто хотите посмотреть что-то быстро в командной строке.

Я написал утилиту для отображения первых <n> строк файла следующим образом:

--- строка 1 ---
1:{header-1} 2:{header-2} 3:...

--- строка 2 ---
1:{data-1} 2:{data-2} 3:...

Это, очевидно, очень неэффективно, но этого достаточно, чтобы пропустить через grep или выяснить, в каких столбцах заголовка использовать «cut -f».

Существует ли средство просмотра на основе * nix для сеанса терминала, которое будет отображать строки и столбцы файла с разделителями табуляции и позволит вам переместить окно просмотра поверх файла или иным образом просмотреть данные?

Я не хочу писать это сам; вместо этого я просто сделал бы переформататор, который заменил бы табуляцию пробелами для заполнения, чтобы я мог открыть файл в emacs и увидеть выровненные столбцы. Но если уже есть инструмент, позволяющий сделать что-то подобное, это было бы здорово!

(Или я мог бы просто жить с Excel.)

5 ответов5

12

Это работает, чтобы вывести красивую версию для печати файла с разделителями табуляции

column -t -s $'\t' list-of-entries.txt
8

Откройте файл в vim и установите табуляцию на что-то высокое, чтобы столбцы были выстроены в ряд. Если вы не знакомы с vim, сначала запустите его:

vim some_file.csv

Затем установите табуляцию на какое-то высокое значение, чтобы столбцы были выровнены. Тип:

:set tabstop=20

Если строки становятся слишком длинными, вы также должны отключить перенос, чтобы можно было прокручивать вбок вместо переноса текста:

:set nowrap

Перемещение: есть несколько способов, но наиболее простые, такие как клавиши со стрелками и pgup/pgdown/home/end, будут работать. Некоторые другие полезные команды движения:

CTRL+U: move half screen up
CTRL+D: move half screen down
gg: move to top
G: move to bottom

Вы можете искать текст так же, как и в человеке:

/regular_expression (search forward)
?regular_expression (search backward)

Затем введите "n", чтобы найти следующее совпадение, и "N", чтобы найти предыдущее.

Вы также можете перемещаться с помощью мыши, если ваш терминал поддерживает это, и вы вводите:

:set mouse=a

Изменить: я забыл, что вы можете выйти с:

:q (if you haven't changed the text)
:wq (to save it before quitting)
:q! (to abandon changes)
7

Существует электронная таблица Unix с текстовым режимом, которая называется sc которая может подойти вам. Вам, вероятно, понадобится передать файл через psc чтобы преобразовать его в формат файла, который использует sc .

6

Есть еще одно решение, которое включает в себя сценарий. Сохраните этот скрипт, например, в tab.pl

#!/usr/bin/perl

use strict;

my @lines;
# first read the file into a list of lists
while (<>)
{
    chomp; # remove the newline from the end of the line
    my @fields = split("\t");
    push @lines, \@fields;
}
my @lengths;
# calculate the maximum lengths of each field
foreach (@lines)
{
    for (my $i = 0; $i < scalar @$_; $i++)
    {
        $lengths[$i] = $lengths[$i] < length $$_[$i] ? length $$_[$i] : $lengths[$i];
    }
}
# now print the text aligned
foreach (@lines)
{
    for (my $i = 0; $i < scalar @$_; $i++)
    {
        print $$_[$i], " " x ($lengths[$i] - length ($$_[$i]) + 1);
    }
    print "\n";
}

Затем просто введите:

perl tab.pl some_file.csv | less

Или сохраните результат в файл и откройте его в своем любимом текстовом редакторе:

perl tab.pl some_file.csv > result.txt
1

pr позволяет расширить вкладки до заданного количества пробелов с помощью -e . Не забудьте передать -t -T , так что он фактически не форматировать всю страницу для печати.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .