在bash中仅交换一些行的列

时间:2015-10-12 15:37:37

标签: bash awk swap

我有一个文件,其列的排序在上半部分有一个逻辑,另一个在最低部分,如

  

上半场

     

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

     

下半场

     

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 -

我希望上半部分打印$1, $3, $4, $2, $5, $6, $7, $8而下半部分只打印$0,以便它们具有相同的顺序。

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

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

1 个答案:

答案 0 :(得分:1)

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 $1 " " $3 " " $4 " " $2 " " $5 " " $6 " " $7 " " $8
    }
    else{
    print $0
    }
}