gpt4 book ai didi

matrix - 使用 awk 从 xyz 到矩阵

转载 作者:行者123 更新时间:2023-12-04 06:09:45 24 4
gpt4 key购买 nike

我有一个问题,我设法通过变通解决了,所以我在这里希望向您学习更优雅的解决方案;-)

我必须解析程序的输出:它像这样写一个三列 x y z 的文件

1 1 11  
1 2 12
1 3 13
1 4 14
2 1 21
2 2 22
2 3 23
2 4 24
3 1 31
3 2 32
3 3 33
3 4 34
4 1 41
4 2 42
4 3 43
4 4 44

在这样的矩阵中
11 12 13 14  
21 22 23 24
31 32 33 34
41 42 43 44

我用这样的两行 bash 脚本解决了
dim_matrix=$(awk 'END{print sqrt(NR)}' file_xyz) #since I know that the matrix has to be squared and there are no blank lines in the file_xyz  
awk '{printf("%s%s",$3, !(NR%'${dim_matrix}'==0) ? OFS :ORS ) }' file_xyz

你能建议我一种只用 awk 执行相同操作的方法吗?

最佳答案

awk 不做真正的多维数组,但你可以用正确构造的字符串来伪造它:

awk '
{mx[$1 "," $2] = $3}
END {
size=sqrt(NR)
for (x=1; x<=size; x++) {
for (y=1; y<=size; y++)
printf("%s ",mx[x "," y])
print ""
}
}
' filename

您可以通过一次 awk 调用和对 wc 的调用来完成您的示例。
awk -v "nlines=$(wc -l < filename)" '
BEGIN {size = sqrt(nlines)}
{printf("%s%s", $3, (NR % size == 0 ? ORS : OFS))
}' filename

关于matrix - 使用 awk 从 xyz 到矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7906095/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com