假设我的流有 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/