首页 > 解决方案 > 将矩阵写入 shell 中的一列或使用 awk

问题描述

我有一个矩阵:

input.txt
1 2 3
2 3 5
2 3 4

~
我想写在一栏中

output.txt
1 
2 
2 
2
3
3
3
5
4

我可以用下面的脚本做到这一点

#!/bin/sh
pr -ts" " --columns 3 input.txt > output.txt
awk '
{ 
    for (i=1; i<=NF; i++)  {
        a[NR,i] = $i
    }
}
NF>p { p = NF }
END {    
    for(j=1; j<=p; j++) {
        str=a[1,j]
        for(i=2; i<=NR; i++){
            str=str" "a[i,j];
        }
        print str
    }
}' output.txt

但我正在寻找一种有效的方法来处理具有 n 列的矩阵。

该脚本pr -ts" " --columns 50 input.txt > output.txt也不适用于较大的列大小。我将它与 50 列大小一起使用并得到以下错误

pr: page width too narrow

标签: shellawk

解决方案


这是你想要做的吗?

$ cat tst.awk
{
    for (i=1; i<=NF; i++) {
        vals[i] = vals[i] $i ORS
    }
}
END {
    for (i=1; i<=NF; i++) {
        printf "%s", vals[i]
    }
}

$ awk -f tst.awk file
1
2
2
2
3
3
3
5
4

推荐阅读