Mic*_* H. 5 unix terminal tabs
我使用了许多制表符分隔的数据文件,其中列的长度不确定。
通常,人们查看这些文件的方式是将它们从服务器下载到 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。)
too*_*o42 12
这可以输出制表符分隔文件的漂亮打印版本
column -t -s $'\t' list-of-entries.txt
Run Code Online (Sandbox Code Playgroud)
在 vim 中打开文件并将制表位设置为高位,因此列将对齐。如果你不熟悉vim,首先启动它:
vim some_file.csv
Run Code Online (Sandbox Code Playgroud)
然后将制表位设置为某个较高的值,这样列就会对齐。类型:
:set tabstop=20
Run Code Online (Sandbox Code Playgroud)
如果行变得太长,您还应该关闭环绕,这样您就可以横向滚动而不是环绕文本:
:set nowrap
Run Code Online (Sandbox Code Playgroud)
四处走动:有多种方法,但最直接的方法如箭头键和 pgup/pgdown/home/end 将起作用。其他一些有用的移动命令:
CTRL+U: move half screen up
CTRL+D: move half screen down
gg: move to top
G: move to bottom
Run Code Online (Sandbox Code Playgroud)
您可以像在 man 中一样搜索文本:
/regular_expression (search forward)
?regular_expression (search backward)
Run Code Online (Sandbox Code Playgroud)
然后键入“n”查找下一个匹配项,键入“N”查找前一个匹配项。
如果您的终端支持,您也可以使用鼠标导航,然后键入:
:set mouse=a
Run Code Online (Sandbox Code Playgroud)
编辑:我忘了你可以退出:
:q (if you haven't changed the text)
:wq (to save it before quitting)
:q! (to abandon changes)
Run Code Online (Sandbox Code Playgroud)
还有另一种解决方案,它涉及脚本。例如,将此脚本保存到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";
}
Run Code Online (Sandbox Code Playgroud)
然后只需键入:
perl tab.pl some_file.csv | less
Run Code Online (Sandbox Code Playgroud)
或者将结果保存到文件中并使用您喜欢的文本编辑器打开它:
perl tab.pl some_file.csv > result.txt
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5732 次 |
| 最近记录: |