Linux 如何按列重新排列文本文件的块

Linux 如何按列重新排列文本文件的块,linux,bash,for-loop,awk,Linux,Bash,For Loop,Awk,Hii专家是我在重新排列文本文件时通常面临的另一个问题 我的文本文件安排如下 > 1 2 3 > 2 3 4 > 1 4 5 但是我需要重新排列上面的文件,将最后一个块放到第一列,在最后一个块放到第二列之前,等等。如下所示:有人能为同样的问题提出更好的解决方案吗?提前谢谢 1 2 1 4 3 2 5 4 3 编辑:要创建shell脚本,请执行上述操作,将其存储在名为foo的文件中: 然后将其作为foo文件运行 编辑:要创建shell脚本,请执行上述操作,将其存储在名为fo

Hii专家是我在重新排列文本文件时通常面临的另一个问题

我的文本文件安排如下

>
1
2
3
>
2
3
4
>
1
4
5 
但是我需要重新排列上面的文件,将最后一个块放到第一列,在最后一个块放到第二列之前,等等。如下所示:有人能为同样的问题提出更好的解决方案吗?提前谢谢

1 2 1
4 3 2
5 4 3
编辑:要创建shell脚本,请执行上述操作,将其存储在名为foo的文件中:

然后将其作为foo文件运行

编辑:要创建shell脚本,请执行上述操作,将其存储在名为foo的文件中:


然后将其作为foo文件运行。

我们可以在脚本中包含awk-f tst.awk文件,以便只需要更改输入文件。这是一个shell命令,因此您可以将其包含在shell脚本中,但实际上只需编写awk'script'${@:-}在shell脚本中,而不是在另一个包含awk脚本的文件中。您能根据需要更新代码吗,完成…..我们是否可以在脚本中包含awk-f tst.awk文件,以便只需要更改输入文件。这是一个shell命令,因此可以将其包含在shell脚本中,但实际上只需编写awk“script”${@:-}在一个shell脚本中,而不是在另一个包含awk脚本的文件中。您可以根据更新代码吗。。。。。
$ cat tst.awk
/^>/ {
    numRows = 0
    ++numCols
    next
}
{ vals[++numRows,numCols] = $1 }
END {
    for (rowNr=1; rowNr<=numRows; rowNr++) {
        for (colNr=numCols; colNr>0; colNr--) {
            printf "%s%s", vals[rowNr,colNr], (colNr>1 ? OFS : ORS)
        }
    }
}
$ awk -f tst.awk file
1 2 1
4 3 2
5 4 3
#!/usr/bin/env bash

awk '
    /^>/ {
        numRows = 0
        ++numCols
        next
    }
    { vals[++numRows,numCols] = $1 }
    END {
        for (rowNr=1; rowNr<=numRows; rowNr++) {
            for (colNr=numCols; colNr>0; colNr--) {
                printf "%s%s", vals[rowNr,colNr], (colNr>1 ? OFS : ORS)
            }
        }
    }
' "${@:--}"