我有一个文本文件,每行包含一小段数据:可能是一个单词,也可能是一个数字。为简单起见,我们假设该文件中没有空行,也没有标题。例如,假设我的输入是:
hobby
anger
experienced
profession
golf
director
code
telephone
现在,我希望将该输入以表格形式、行优先、保留顺序排列在我的终端上。假设我的终端有 40 个字符宽;这将是:
hobby anger experienced
profession golf director
code telephone
如果有一种简洁的方式来实现这一点,而不需要很长的 shell 脚本就已经很好了。除此之外,我还想要索引,如下所示:
0 1 2
0 hobby anger experienced
3 profession golf director
6 code telephone
这对于
nl --line-increment
来说是可行的,但问题是,在知道最大索引是多少之前,我需要知道列数,并且我需要最大索引才能知道索引列宽度是多少,并且我需要知道索引列的宽度来决定一行可以容纳多少列,所以我们有一点恶性循环。
到目前为止我所拥有的:
如果我放弃任何对齐方式以及每行列数的自动最大化,我可以使用:
per_line=3; pr -a -${per_line} -t -s\ | nl -v 0 --line-increment ${per_line}
获得:
0 hobby anger experienced
3 profession golf director
6 code telephone
如果您愿意放弃自动计算出最佳列数,您可以设置
${num_cols}
,然后使用:
pr -a -${num_cols} -t -s, - | \
nl -v 0 --line-increment ${num_cols} | \
column -s, -t
根据您的输入,这给出:
0 hobby anger experienced
3 profession golf director
6 code telephone
这或多或少是你想要的。
这看起来不错。文件
input
包含您发布的代码内容。
首先我生成数字 0 1 2 和由
,
分隔的 3 列的文件内容。
然后对于从第二行开始的行,行进行编号。
之后,漂亮的专栏就创建好了。
$ ( seq 3; cat input; ) | paste -d, - - - | ( read;echo ",$REPLY"; nl -v 0 -i 3 -s, ) | column -t -s,
1 2 3
0 hobby anger experienced
3 profession golf director
6 code telephone