将整数行转换为多列输出

将整数行转换为多列输出

我正在尝试获取文件的输入以生成一个列表,其中包含按排序顺序排列的数字的行和列。这将用于稍后生成可打印文档,因此我能够替换当前在 Excel 中手动使用的步骤。

原始数据是 1 到 20000 之间的整数。假设:

1 2 3 4 5 6 7 8 ...

或者

1
2
3
4
5

该列表按数值排序并用空格分隔。 (可选)我可以用 \n 或其他任何东西分隔这些值,如果这有助于我实现我的目标

列数量应该是 7,但很可能我以后可以自己更改它。

我想要的输出:

1 40 80
2 41 81 
3 42 82 
4 43 83

我在阅读一些 unix.se 问题、有关 SF 的其他建议、专栏手册页、fml 等的过程中希望弄清楚这一点时尝试了什么。

for value in $(cat /tmp/list); do      printf "%-8s\n" "${value}"; done|column -x

输出(简化,制表符之间):

1 2 3 4
5 6 7 8
...

接下来的尝试是关于 Serverfault 的建议:

cat /tmp/list |fmt |column -t

输出:

1    2    3    4    5 
6    7    8    9    10

我想了解我在这个过程中理解的问题出在哪里,而不仅仅是原始解决方案(但这会有帮助)。

答案1

echo {1..20000} | tr " " "\n" | sort -n | pr -T3 -s" " -l 6667

输出:

1 6668 13335
2 6669 13336
3 6670 13337
4 6671 13338
5 6672 13339
6 6673 13340
7 6674 13341
8 6675 13342
9 6676 13343
10 6677 13344
11 6678 13345

要使用您的文件进行测试:

tr " " "\n" < file | sort -n | pr -T3 -s" " -l 6667

20000 个数字是全在一行还是一列都没有关系。

答案2

假设您的输入由换行符分隔的数字组成,例如:

1
2
3
...

只需一个简单的sed脚本即可将它们放入列中:

$ sed -n '{N;N;N;N;N;N;s/\n/\t/g;p}'

当脚本遇到一行时,它会再将 6 行 ( N;N;N;N;N;N) 读入缓冲区,将缓冲区中的每个换行符替换为制表符 ( s/\n/\t/g) 并打印缓冲区 ( p)。结果:

1    2    3    4    5    6    7
8    9    10   11   12   13   14
...

笔记:输入中的行数需要是七的倍数,任何剩余的条目都将被删除。

相关内容