2013-06-25 29 views
0

我有一個包含三列(ChrPosition以及Name)的列數很大(基本上是幾千列三列)的文件。將列從文件後面移動到前面

我想將這些最後三列移動到文件的前面,以便這些列變成Name Chr Position,然後文件繼續三重奏。

我認爲這可能與awk可能,但我不知道如何awk工作來做到這一點!

樣品輸入:

Gene1.GType Gene1.X Gene1.Y ....ending in GeneN.Y  Chr  Position  Name 

所需的輸出:

Name Chr  Position  (Gene1.GType Gene1.X  Gene1.Y) x n samples 
+0

請提供一些樣品的輸入和輸出,這不是很清楚,我你想達到的目標。 – SBI

+0

感謝您使這個更容易閱讀,Birei – Joni

回答

1

我覺得下面的例子確實或多或少你想要什麼。

$ cat file 
A B C D E F G Chr Position Name 
1 2 3 4 5 6 7 8 9 10 
$ cat process.awk 
{ 
    printf $(NF-2)" "$(NF-1)" "$NF 
    for(i=1; i<NF-2; i++) 
    { 
    printf " "$i 
    } 
    print " " 
} 
$ awk -f process.awk file 
Chr Position Name A B C D E F G 
8 9 10 1 2 3 4 5 6 7 

awkNF表示上的行場的數目。

+0

其在輸出中的字段順序是不同的,並會更好地使用'OFS'而不是重複空間字符很多次,但它的工作,所以** + 1 * * – Birei

+0

@Birei這是一個很好的觀點,但是找不到它與'printf $ i'一起工作。怎麼會這樣呢? – Bernhard

+2

'printf OFS $ i'似乎爲我工作。 – Birei

0

一個班輪:

awk '{ Chr=$(NF-2) ; Position=$(NF-1) ; Name=$NF ; $(NF-2)=$(NF-1)=$NF="" ; print Name, Chr, Position, $0 }' file 
相關問題