2015-04-28 34 views
0

我想讓我的第二列爲非負值,因爲某些值是正值和負值,所以嘗試使用AWK函數。使用AWK獲得非負值

我在牀檔六列我使用下面的命令

awk -F"\t" '{print $1"\t"$2<0?$2*-1:$2"\t"$3"\t"$4"\t"$5"\t"$6}' CTCF_first_coordinates > CTCF_first_coordinates_new 

我的問題是,當我運行它,則不能打印我的第一列和值不會轉換成非負。但是,如果我不打印我的第一列代碼的作品。

任何人都可以建議我如何改進我的代碼來獲得正確的輸出?

下面是輸入牀文件,該文件是製表符分隔和第二列包含負值與正值

chr18 576980 586980 CETN1 CLUL1 M1 
chr18 -8280 1720 NA USP14 M1 

和i的輸出所需要的是下面我想要負值爲正和休息一切一起保持相同

chr18 576980 586980 CETN1 CLUL1 M1 
chr18 8280 1720 NA USP14 M1 

除了上述問題我有一些更多問題,即如上所示的第一座標輸出文件是大於第二座標。是否有任何方法來交換文件中兩列的選定值,即第2列和第3列。我在整個文件中有192個這樣的實例。所以,我的輸出應該是這樣的

CHR 18 576980 586980 CETN1 CLUL1 M1 CHR 18 1720 8280 NA USP14 M1

+1

請與所需的輸出 – fedorqui

+0

下面的例子一起顯示一些輸入文件是輸入文件 chr17 78614606 78624606 B3GNTL1 METRNL M1 chr17 78364327 78374327 FN3K ZNF750 M1 chr17 78618175 78628175 B3GNTL1 METRNL M1 CHR 18 576980 586980 CETN1 CLUL1 M1 chr18 -8280 1720 NA USP14 M1 –

+0

請用這些信息編輯您的問題。在評論中跟蹤文件和代碼是很困難的。 – fedorqui

回答

0

只要改變跡象,如果它爲負:

$ awk '$2<0 {$2=-$2}1' file 
chr18 576980 586980 CETN1 CLUL1 M1 
chr18 8280 1720 NA USP14 M1 

1在年底該命令是一種將True設置爲awk的方法,以便它執行其默認行爲:打印當前行。

+0

非常感謝:) –

+0

我可以問你,我的代碼有什麼問題:) –

+0

@PrasoonAgarwal我想這是一個括號問題,因爲''{print $ 1'\ t「($ 2 <0?$ 2 * -1:$ 2)「\ t」$ 3「\ t」$ 4「\ t」$ 5「\ t」$ 6}「工作。還要注意,你可以像'-v OFS =「\ t」'那樣設置輸出字段分隔符,這樣你就不必在'print'表達式中對它進行硬編碼。 – fedorqui