![如何将单列变成三列?](https://linux22.com/image/164802/%E5%A6%82%E4%BD%95%E5%B0%86%E5%8D%95%E5%88%97%E5%8F%98%E6%88%90%E4%B8%89%E5%88%97%EF%BC%9F.png)
如何将单列数据分布到三列上?
输入:
A
B
C
A
B
C
.
.
.
我想要以下结果:
A B C
A B C
A B C
.
.
.
答案1
鉴于输入数据与名为 的文件中的问题中所写的完全相同file
,您可以paste
像这样使用:
$ paste - - - <file
A B C
A B C
. . .
输出以制表符作为字段分隔符,但可以使用以下-d
选项更改:
$ paste -d ' ' - - - <file
A B C
A B C
. . .
paste
三个破折号对应于输出中的列,这些列将一次从一行输入中填充。
在您的系统上查看man paste
。
答案2
和xargs
:
$ xargs -n3 < file
A B C
A B C
. . .
每个命令行最多输出三个参数。请注意,我省略了要执行的命令,echo
如果丢失,则默认为该命令。它是一样的
xargs -n3 echo < file
答案3
在非常“高尔夫”的形式中,您可以使用以下(GNU)awk
命令:
awk '{cache=(n%3) ? cache" "$0 : $0; n++; if (n % 3 == 0) {print cache; cache="";}}' inputfile.txt
以更易读的形式:
awk '{if (n%3==0) cache=$0; else cache=cache" "$0; n++; if (n%3==0) {print cache; cache="";}}' inputfile.txt
该awk
程序使用一个内部行计数器n
(隐式初始化为 0,这很重要)和一个内部缓存变量,cache
用于累积三行的内容,以空格 ( " "
) 分隔,并每三行“刷新”缓存。
3
您可以通过替换和 来调整您的需求," "
其中cache=cache" "$0
需要不同的行数和“行令牌分隔符”。