Я работаю с большим количеством разграниченных вкладкой файлов данных с переменными столбцами неопределенной длины.
Как правило, способ, которым люди просматривают эти файлы, состоит в том, чтобы снизить их от сервера до их Windows или машины Mac, и затем открыть их в Excel. Это, конечно, полнофункционально, позволяя фильтрацию и другие хорошие опции. Но иногда, Вы просто хотите посмотреть на что-то быстро на командной строке.
Я записал базовую утилиту для отображения первого<n>
строки файла как так:
---строка 1---
1: {заголовок 1} 2: {заголовок 2} 3:...
---строка 2---
1: {данные 1} 2: {данные 2} 3:...
Это является, очевидно, очень хромым, но этого достаточно для передачи по каналу через grep или фигуру который столбцы заголовка использовать "сокращение-f" на.
Существует ли *, отклоняют - базирующееся средство просмотра для терминального сеанса, который отобразит строки и столбцы файла с разделением табуляцией и позволит Вам переместить окно просмотра через файл или иначе посмотреть на данные?
Я не хочу писать это сам; вместо этого, я просто сделал бы reformatter, который заменит вкладки пробелами для дополнения, таким образом, я мог открыть файл в emacs и видеть выровненные столбцы. Но если бы уже существует инструмент там, чтобы сделать что-то вроде этого, это было бы большим!
(Или, я мог просто жить с Excel.)
Существует названная электронная таблица текстового режима Unix sc
который может работать на Ваше использование. Необходимо будет, вероятно, передать файл через psc
преобразовать его в формат файла это sc
использование.
Откройте файл в энергии и установите позицию табуляции на что-то высоко, таким образом, столбцы будут выстроены в линию. Если Вы не знакомы с энергией, сначала запускаете ее:
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)
Существует другое решение, которое включает сценарий. Сохраните этот сценарий к, например, 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
pr
позволяет Вам разворачивать вкладки до данного количества пробелов с -e
. Не забывайте передавать -t -T
так, чтобы это на самом деле не форматировало целую страницу для печати.