有时,我得到一个输入制表符分隔的列表,例如,它不太对齐
var1 var2 var3
var_with_long_name_which_ruins_alignment var2 var3
Run Code Online (Sandbox Code Playgroud)
有没有一种简单的方法可以使它们对齐?
var1 var2 var3
var_with_long_name_which_ruins_alignment var2 var3
Run Code Online (Sandbox Code Playgroud) 我有(有时)制表符分隔数据的多行文本文件。我想输出文件以便我可以浏览它 - 所以我只想看到每行的前 80 个字符(我设计的文本文件将重要的内容放在每一行的前面)。
我以为我可以使用 cat 读取文件的每一行,并将每一行发送到管道中的下一个命令:
cat tabfile | cut -c -80
Run Code Online (Sandbox Code Playgroud)
但这似乎坏了。我试着四处游荡,grep 似乎工作 - 但后来我发现,不,它没有(不是文件中的每一行都有 80 多个字符) - 似乎制表符被视为单个字符。
我试过:
cat tabfile | tr \t \040 | cut -c -80
Run Code Online (Sandbox Code Playgroud)
尽管这会通过消除空白可读性来稍微破坏我的数据。但这没有用。也没有:
cat tabfile | tr \011 \040 | cut -c -80
Run Code Online (Sandbox Code Playgroud)
也许我使用 tr 错了?我之前遇到过 tr 问题,想删除多个空格(似乎我在这台机器上可以访问的 tr 版本有一个 -s 选项来压缩多个字符 - 我可能需要更多地使用它)
我敢肯定,如果我搞砸了,我可以使用 perl、awk 或 sed 或其他方法来做到这一点。
但是,我想要一个使用(POSIX?)常规命令的解决方案,以便它尽可能具有可移植性。如果我最终使用 tr,我可能最终会尝试将制表符转换为字符,也许会进行计算,削减计算,然后将这些字符重新转换为制表符以进行输出。
它不需要是一行/直接在命令行上输入 - 脚本就可以了。
有关选项卡文件的更多信息:
我使用制表符来分隔字段,因为有一天我可能想将数据导入其他程序。所以我倾向于在内容之间只有一个标签。但我也使用制表符将内容与垂直列对齐,以在查看纯文本文件时提高可读性。这意味着对于某些文本,我用空格填充内容的末尾,直到我到达选项卡将工作的位置,以将下一个字段与其上方和下方的字段对齐。
DarkTurquoise #00CED1 海洋、天空、划艇自然 MediumSpringGreen #00FA9A 适用于树木魔法 Lime #00FF00 仅用于春鸡和果蔬$
我的目标是将 Kate 设置为在 Python 文件上正常工作,但在其他文档上使用不同的设置(制表符而不是空格)。我确信其他人正在这样做,但我想不出一个方便的解决方案。我很感激任何建议。
凯特在这里有缩进设置:
一种选择是“默认缩进模式”。该设置的一个选择是 Python。但是,我找不到在哪里设置(甚至显示)用于 Python 选择的选项。
此外,尚不清楚“默认缩进模式”与该页面上的缩进显式设置之间的交互是什么。一个会覆盖另一个吗?
我有一个包含四个值的 .tsv 文件(由制表符分隔的值)。因此,每一行应该只有三个选项卡,并且每个选项卡周围都有一些文本,如下所示:
value value2 value3 value4
Run Code Online (Sandbox Code Playgroud)
但看起来有些行被破坏了(有超过三个选项卡)。我需要找出这些线。
我想出了以下 grep 模式。
grep -v "^[^\t]+\t[^\t]+\t[^\t]+\t[^\t]+$"
我的想法:
然后我只是将其按正确的顺序排列正确的次数。这应该匹配正确的行。所以我通过 -v 选项恢复它以获得错误的行。
但是使用 -v 选项,它会匹配文件中的任何行以及我尝试过的一些随机文本,其中没有任何选项卡。
请问我的错误是什么?
编辑:我正在使用 debian 和 bash。
我的输入包含我想要制表的 ANSI 颜色代码。我希望输出保持彩色,因此表格输出应保持 ANSI 颜色代码。因此,天真地剥离它们不符合我的要求。
例如,对于这个输入,
\033[0;32;1mgreen_apple\033[0m 1 100
orange 20 19
pineapple 1000 87
avocado 4 30
Run Code Online (Sandbox Code Playgroud)
我期望的输出类似于
green_apple 1 100
orange 20 19
pineapple 1000 87
avocado 4 30
Run Code Online (Sandbox Code Playgroud)
在上面的输出中,“green_apple”应该根据输入的颜色代码(即绿色)着色。我想知道如何做到这一点。
我试过 column,但它不处理 ANSI 代码。的输出
echo '\033[0;32;1mgreen_apple\033[0m 1 100
orange 20 19
pineapple 1000 87
avocado 4 30' | column -t
Run Code Online (Sandbox Code Playgroud)
不幸的是
green_apple 1 100
orange 20 19
pineapple 1000 87
avocado 4 30
Run Code Online (Sandbox Code Playgroud)
注意非制表。
我已经阅读了一些关于 unexpand 的解释,但要么我不明白,要么没有按预期工作。
让我们考虑以下示例:
[root@hope log]# echo "A12345678B" | tr '[1-8]' ' ' | unexpand -a
A B
[root@hope log]# echo "A12345678B" | tr '[1-8]' ' ' | unexpand -a | od -ta
0000000 A ht sp B nl
0000005
[root@hope log]# echo "A12345678B12345678C" | tr '[1-8]' ' ' | unexpand -a | od -ta
0000000 A ht sp B ht sp sp C nl
0000011
[root@hope log]# echo "12345678" | tr '[1-8]' ' ' | unexpand -a | od …Run Code Online (Sandbox Code Playgroud) tabulation ×7
columns ×2
colors ×1
command-line ×1
coreutils ×1
csv ×1
editors ×1
grep ×1
indentation ×1
kate ×1
less ×1
python ×1
shell ×1
shell-script ×1