2014-06-26 93 views
1

我有以下結構的文件中值的列:排序根據其他

輸入

1 30923 2 300 G:0.503333 T:0.496667 T 
1 51476 2 300 T:0.986667 C:0.0133333 C 
1 51479 2 300 T:0.966667 A:0.0333333 T 

我想要做的是改變第五和第六列的位置方式是一列獲得與第七列相同的順序。你可以在例子中看到。在第七列中,我們有T,C,T,並且在變化之後,T,C,A中的第六列已經變爲T,C,T在輸出中,即在第三行中,第五與第七欄相比,第六欄已經切換。

輸出

1 30923 2 300 G:0.503333 T:0.496667 T 
1 51476 2 300 T:0.986667 C:0.0133333 C 
1 51479 2 300 A:0.0333333 T:0.966667 T 

我希望我能解釋清楚,我一直沒能找到解決的辦法,請你給我一個提示,如何做到這一點?

預先感謝您。

+0

那麼你總是希望與第6列遵循第七列的順序? –

+0

基本上,我想要的是重新排列第五或第六列中的一個,使其具有與第七列完全相同的字母順序,不管它是第5還是第6。謝謝。 – Homap

+0

您如何預計決定重新排列哪些列?你是否總是隻是將價值與另一列交換來實現這一目標? –

回答

2

使用輸出作爲製表符分隔符和所有列是有道理的。

awk -F'[ :]*' '{if($7 == $9) print $1,$2,$3,$4,$5,$6,$7,$8,$9; else print $1,$2,$3,$4,$7,$8,$5,$6,$9}' input.txt|column -t 

輸出:

1 30923 2 300 G 0.503333 T 0.496667 T 
1 51476 2 300 T 0.986667 C 0.0133333 C 
1 51479 2 300 A 0.0333333 T 0.966667 T 
+0

這很好。只有一個問題,我怎樣才能使輸出同質化,就是所有的行都像第三個一樣打印出來,就像刪除「:」一樣。我還會以製表符分隔的格式打印列。非常感謝。 – Homap

+0

請找到更新的腳本。 – dvk317960

2

如果我理解正確,也許這對你有用?

:文件a.awk

substr($6,1,1) == $7 { print } 
substr($6,1,1) != $7 { print $1, $2, $3, $4, $6, $5, $7 } 

:文件a.txt中

1 30923 2 300 G:0.503333 T:0.496667 T 
1 51476 2 300 T:0.986667 C:0.0133333 C 
1 51479 2 300 T:0.966667 A:0.0333333 T 

的bash-3.2 $ AWK -f a.awk A.TXT

1 30923 2 300 G:0.503333 T:0.496667 T 
1 51476 2 300 T:0.986667 C:0.0133333 C 
1 51479 2 300 A:0.0333333 T:0.966667 T