微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在bash中,我怎样才能拆分固定维数列中的一列

我怎样才能拆分固定维度的几列中的单个列,例如我有一个这样的列:

1 2 3 4 5 6 7 8

和大小p。 前4,我想获得

1 5 2 6 3 7 4 8

或大小p。 前2,我想获得

1 3 5 7 2 4 6 8

正确的方法不打印到与命令的shell

你怎么能问当前的selectbash?

Home / End键在tmux中不起作用

如何在ImageMagick中使用带标题的stdin

使用&参数在body中测量bash脚本的运行时间

查找文件中出现的单词的所有实例

Shell脚本:在shebang中使用grep和tr

将参数从调用bash脚本传递给Rscript

在bash中重命名多个文件

sed在Linux和FreeBSD上

使用awk:

awk ' BEGIN { # Numbers of rows to print n=4; } { # Add to array with key = 0,1,2,3,.. l[(NR-1)%n] = l[(NR-1)%n] " " $0 }; END { # print the array for (i = 0; i < length(l); i++) { print l[i]; } } ' file

好的,这有点长,不可靠,但下面的工作:

td=$( mktemp -d ); split -l <rows> <file> ${td}/x ; paste $( ls -1t ${td}/x* ) ; rm -rf ${td}; unset td

其中<cols>是你想要的行数, file是你的输入文件。 说明:

td=$( mktemp -d )

创建一个临时目录,以便我们可以将临时文件放入其中。 将其存储在td – 有可能你的shell已经有一个td变量了,但是如果你是这个子shell的话,你的范围应该是OK的。

split -l <rows> <file> f ${td}/x

将原始文件拆分成许多较小的文件,每个<rows>长。 这些将被放入您的临时目录,所有文件将以x为前缀

paste $( ls -1t ${td}/x* )

写出这些文件,以便连续列中的行

rm -rf ${td}

删除文件和目录。

unset td

清洁环境。

假设你知道列中的行数(这里是8):

n=8 # to get output with 4 rows: seq $n | pr -ts" " -$((n/4))

1 5 2 6 3 7 4 8

# to get output with 2 rows: seq $n | pr -ts" " -$((n/2))

1 3 5 7 2 4 6 8

如果你知道所需的输出宽度,你可以使用column 。

# display in columns for an 80 column display cat file | column -c 80

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐