bash - 连接行,对记录数取模

标签 bash gnu-coreutils

假设我的流有 x*N 行长,其中 x 是记录数,N 是每条记录的列数,并且按列输出。例如,x=2,N=3:

1
2
Alice
Bob
London
New York

如何将每一行以记录数为模,重新连接到列中:

1   Alice   London
2   Bob     New York

如果我使用带有 N 个 -paste,我会得到转置的输出。我可以使用 split-l 选项等于 N,然后使用 paste 重新组合这些片段,但我想这样做它在流中,而不会到处吐出临时文件。

是否有一个“简单”的解决方案(即,而不是调用像 awk 这样的东西)?我想可能有一些神奇的 join 解决方案,但我看不到它......


编辑另一个例子,当 x=5 且 N=3 时:

1
2
3
4
5
a
b
c
d
e
alpha
beta
gamma
delta
epsilon

预期输出:

1   a   alpha
2   b   beta
3   c   gamma
4   d   delta
5   e   epsilon

最佳答案

您正在寻找pr “列”流:

pr -T -s$'\t' -3 <<'END_STREAM'
1
2
Alice
Bob
London
New York
END_STREAM
1       Alice   London
2       Bob     New York

pr 位于 coreutils 中。

关于bash - 连接行,对记录数取模,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45692388/

相关文章:

bash - 递归地将文件放入Unix中的回收站

macos - 带有数字名称的 bash for 循环

bash - 为什么回显$?返回与预期不同的值?

bash - 在 bash 脚本中使用 GNU 超时和 SSH -t 来防止挂起

bash - Linux gnu 少 : long lines in buffer broken down when copy+pasting

linux - 如何在保留空字符串的同时解析 Bash 中以换行符分隔的数据?

bash - 如何将带空格的参数从 bash 脚本传递到 bash 脚本?

linux - 使用带 -L 选项的查找

linux - coreutils 程序 'yes' 有什么意义?

linux - 带有 ptxdist、coreutils 的嵌入式 Linux 中断