我有100行1列。像这样的数据
line1
line2
line3
.
.
.
line100
我想要这样的输出
line1 line11 line21 ... line91
line2 line12 line22 ... line92
line2 line13 line23 ... line93
line4 line14 line24 ... line94
.
.
.
line10 line20 line30 ... line100
有没有人帮我这样做。
非常感谢。
答案 0 :(得分:3)
pr -ts" " --columns 10 file_name
其中file_name是您要转换的文件的名称。
答案 1 :(得分:1)
这是另一个
$ printf "%s\n" line{1..100} | pr -10t
line1 line11 line21 line31 line41 line51 line61 line71 line81 line91
line2 line12 line22 line32 line42 line52 line62 line72 line82 line92
line3 line13 line23 line33 line43 line53 line63 line73 line83 line93
line4 line14 line24 line34 line44 line54 line64 line74 line84 line94
line5 line15 line25 line35 line45 line55 line65 line75 line85 line95
line6 line16 line26 line36 line46 line56 line66 line76 line86 line96
line7 line17 line27 line37 line47 line57 line67 line77 line87 line97
line8 line18 line28 line38 line48 line58 line68 line78 line88 line98
line9 line19 line29 line39 line49 line59 line69 line79 line89 line99
line10 line20 line30 line40 line50 line60 line70 line80 line90 line100
答案 2 :(得分:0)
您可以使用rs
:
$ seq 30 | rs 0 4
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
17 18 19 20
21 22 23 24
25 26 27 28
29 30
如果你希望线条相对于:
$ seq 30 | rs 4 0 | rs -T
1 9 17 25
2 10 18 26
3 11 19 27
4 12 20 28
5 13 21 29
6 14 22 30
7 15 23
8 16 24
答案 3 :(得分:0)
将一列转换为 10 列,每列具有 10 值。听起来像矩阵 10x10 使用单个 gawk 脚本:
awk -v d=10 'NR==1{ c=1 }
{ a[c][++k]=$0; if(!(NR%d)){ c++; k=0 } }
END{
for(i=1;i<=d;i++)
for(j=1;j<=c;j++) printf "%s%s",a[j][i],(j==c)? ORS:FS
}' file
-d=10
- devisor / coefficient,它允许指定每列 的最大行数 输出:
line1 line11 line21 line31 line41 line51 line61 line71 line81 line91
line2 line12 line22 line32 line42 line52 line62 line72 line82 line92
line3 line13 line23 line33 line43 line53 line63 line73 line83 line93
line4 line14 line24 line34 line44 line54 line64 line74 line84 line94
line5 line15 line25 line35 line45 line55 line65 line75 line85 line95
line6 line16 line26 line36 line46 line56 line66 line76 line86 line96
line7 line17 line27 line37 line47 line57 line67 line77 line87 line97
line8 line18 line28 line38 line48 line58 line68 line78 line88 line98
line9 line19 line29 line39 line49 line59 line69 line79 line89 line99
line10 line20 line30 line40 line50 line60 line70 line80 line90 line100
答案 4 :(得分:0)
你能不能一次尝试关注awk。
awk -v col=10 '
{
a[FNR]=$0
}
END{
for(i=1;i<=col;i++){
for(j=0;j<=FNR;j=j+col){
printf("%s%s",a[i+j],j==FNR?"":" ");
}
print ""
}
}
' Input_file
<强>说明:强> 所以我在这里创建了一个名为col的变量,其值为10(表示我们要打印的列数)。然后我创建一个名为a的数组,其索引是FNR(当前行的值),value是当前行的值。现在在awk的END块中,我开始一个for循环,它从变量i的值开始,从1到col的值(在这种情况下最大值为10),然后启动一个内部循环,从变量j的值0开始直到FNR的值(这将是Input_file中的总行数)以及每次它增加10的值。在这个内部for循环中打印数组a的值[ i + j],所以它会像[1],[11],[21] ......等等。然后我打印的第二个字符串是这些数组a值之间的空格和检查如果它是最后一个元素,请不要打印空格。现在在外部for循环打印null值,这将在这里打印一个新行。