仅交换 bash 中某些行的列

Swapping columns of only some lines in bash

我有一个文件,其列按一种逻辑在上半部分排序,另一种逻辑在下半部分排序,例如

first half

locus_1 M1 -7.0056323 1 Locus_1 0.004335 1 M3

locus_2 - 3.4194853 1 Locus_2 0.148344 1 M2

locus_3 M5 -2.1111424 1 Locus_3 0.329310 1 M1

second half

locus_4 -4.2389254 1 - Locus_4 0.3219294 1 S2

locus_5 -18.1941031 1 x Locus_5 0.0008329 1 M2

locus_6 13.0201291 1 M4 Locus_6 0.0181229 1 -

我想打印前半部分, , , , , , , ,后半部分只打印[=12=],以便它们具有相同的顺序。

上半部分的 $2 列/第二部分的 $4 列可以包含“-”、“x”、“M[1-5]”或“S[1-5]”,而$3 上半场/$2 下半场的数字可以是正数也可以是负数。

我想用 awk 做一些 for 循环,但我无法成功...我使用 cygwin,如果它有用的话。

link 对于 Awk 内置变量:

http://www.thegeekstuff.com/2010/01/8-powerful-awk-built-in-variables-fs-ofs-rs-ors-nr-nf-filename-fnr/

#!/bin/awk -f
{
    if( NR<4 ){
    print  " "  " "  " "  " "  " "  " "  " " 
    }
    else{
    print [=10=]
    }
}