如何在 bash 中对连续行进行分组?

发布于 2024-11-09 06:11:19 字数 183 浏览 0 评论 0原文

我有一个如下所示的文件:

a
b
c
d
e
f
g
h
i
j
k
l
m

我想将其重新格式化为:

a b c
d e f
g h i
j k l
m

我希望列数是可配置的。你会怎样用 bash 呢?我想不出什么。

I have a file that looks like the following:

a
b
c
d
e
f
g
h
i
j
k
l
m

I want to reformat it like:

a b c
d e f
g h i
j k l
m

I want the number of columns to be configurable. How would you that with bash? I can't think of anything.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

从此见与不见 2024-11-16 06:11:19
host:~ user$ cat file
a
b
c
d
e
f
g
h
i
j
k
l
m
host:~ user$ xargs -L3 echo < file
a b c
d e f
g h i
j k l
m
host:~ user$ 

将“3”替换为您想要的列数。

host:~ user$ cat file
a
b
c
d
e
f
g
h
i
j
k
l
m
host:~ user$ xargs -L3 echo < file
a b c
d e f
g h i
j k l
m
host:~ user$ 

Replace '3' with how many columns you want.

明媚如初 2024-11-16 06:11:19

xargs 答案的稍微改进版本是:

xargs -n3 -r < file

这种方式可以更好地处理尾随空白,并避免为无输入创建单个空行

A slightly improved version of the xargs answer would be:

xargs -n3 -r < file

This way would handle trailing whitespace better and avoid creating a single empty line for no input

酷炫老祖宗 2024-11-16 06:11:19

另一种:

zsh-4.3.11[t]% paste  -d\  - - - < infile
a b c
d e f
g h i
j k l
m  

或者(如果你不关心最后的换行符):

zsh-4.3.11[t]% awk 'ORS = NR % m ? FS : RS' m=3 infile 
a b c
d e f
g h i
j k l
m %     

Another one:

zsh-4.3.11[t]% paste  -d\  - - - < infile
a b c
d e f
g h i
j k l
m  

Or (if you don't care about the final newline):

zsh-4.3.11[t]% awk 'ORS = NR % m ? FS : RS' m=3 infile 
a b c
d e f
g h i
j k l
m %     
诗化ㄋ丶相逢 2024-11-16 06:11:19

由于 < 运算符颠倒了事物的顺序,我想出了这种更直观的方法:

cat file | xargs -n3

但是,在对大文件进行测试之后,结果证明 paste 方法要快得多:

cat file | paste -d\ - - -

Since the < operator reverses the order of things, I figured out this more intuitive approach:

cat file | xargs -n3

However, after tests with large files, the paste approach turned out to be much faster:

cat file | paste -d\ - - -
月牙弯弯 2024-11-16 06:11:19
column -x -c 30 /tmp/file
a       b       c
d       e       f
g       h       i
j       k       l
m

是的,间距并不完全是您想要的,但它可以“更好”地处理可变大小的输入(对于某些更好的定义)。

column -x -c 30 /tmp/file
a       b       c
d       e       f
g       h       i
j       k       l
m

Yes, the spacing isn't exactly what you wanted, but it would handle variable sized inputs "better" (for some definitons of better).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文