Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 将每N行输入放入一个新列_Linux_Bash_Shell_Unix_Awk - Fatal编程技术网

Linux 将每N行输入放入一个新列

Linux 将每N行输入放入一个新列,linux,bash,shell,unix,awk,Linux,Bash,Shell,Unix,Awk,在bash中,给定的输入 1 2 3 4 5 6 7 8 ... 和N例如5,我想要输出 1 6 11 2 7 12 3 8 ... 4 9 5 10 如何执行此操作?用您的号码替换以下脚本中的5 seq 20|xargs -n5| awk '{for (i=1;i<=NF;i++) a[i,NR]=$i; }END{ for(i=1;i<=NF;i++) {for(j=1;j<=NR;j++)printf a[i,j]" "; print ""

在bash中,给定的输入

1
2
3
4
5
6
7
8
...
N
例如5,我想要输出

1  6  11
2  7  12
3  8  ...
4  9
5  10 

如何执行此操作?

用您的号码替换以下脚本中的5

seq 20|xargs -n5| awk '{for (i=1;i<=NF;i++) a[i,NR]=$i; }END{
    for(i=1;i<=NF;i++) {for(j=1;j<=NR;j++)printf a[i,j]" "; print "" }}' 
注:上面的
seq 20
仅用于生成用于测试的数字序列。你在实际工作中不需要它

编辑

正如sudo_O所指出的,我添加了一个纯awk解决方案:

 awk -vn=5 '{a[NR]=$0}END{ x=1; while (x<=n){ for(i=x;i<=length(a);i+=n) printf a[i]" "; print ""; x++; } }' file

awk-vn=5'{a[NR]=0}END{x=1;而(x使用鲜为人知的gem
pr

$ seq 20 | pr -ts' ' --column 4
1 6 11 16
2 7 12 17
3 8 13 18
4 9 14 19
5 10 15 20

下面是我如何使用
awk

awk -v n=5 '{ c++ } c>n { c=1 } { a[c] = (a[c] ? a[c] FS : "") $0 } END { for (i=1;i<=n;i++) print a[i] }'
还有一个:

seq 40 | awk -v n=6 '{ c++ } c>n { c=1 } { a[c] = (a[c] ? a[c] FS : "") $0 } END { for (i=1;i<=n;i++) print a[i] | "column -t" }'

如果输入文件长度不是5的倍数,则此操作将失败。@sudo_O thx为了指出这一点,我没有在这种情况下进行测试,现在添加了纯awk一行。您可以使用
{1..12}
而不是
seq 12
@Kent,这取决于您的技能:)如果它能完成任务,那它只是一个gem。例如,你应该用
seq 21
来测试它。正如你所看到的,你需要一些后处理来实现所需的输出。否则上面的命令将不经修改而失败。@user19340357:我不相信它能达到所需的结果。不管怎样,在研究时命令是如何工作的,您应该首先查看该特定命令的手册页。在本例中,键入:以查看
pr
的手册页。在本例中,鉴于只有三个选项传递给
pr
,是否有一个特定的标记没有很好地记录,您需要更多解释?
awk -v n=5 '{ c++ } c>n { c=1 } { a[c] = (a[c] ? a[c] FS : "") $0 } END { for (i=1;i<=n;i++) print a[i] }'
seq 21 | awk -v n=5 '{ c++ } c>n { c=1 } { a[c] = (a[c] ? a[c] FS : "") $0 } END { for (i=1;i<=n;i++) print a[i] | "column -t" }'
1  6   11  16  21
2  7   12  17
3  8   13  18
4  9   14  19
5  10  15  20
seq 40 | awk -v n=6 '{ c++ } c>n { c=1 } { a[c] = (a[c] ? a[c] FS : "") $0 } END { for (i=1;i<=n;i++) print a[i] | "column -t" }'
1  7   13  19  25  31  37
2  8   14  20  26  32  38
3  9   15  21  27  33  39
4  10  16  22  28  34  40
5  11  17  23  29  35
6  12  18  24  30  36