使用AWK获得非负值

时间:2015-04-28 11:40:14

标签: 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

并且我需要的输出低于我希望负值为正的位置,并且所有内容都保持不变

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

除了上述问题,我还有一些问题,其中第一个坐标上方显示的输出文件大于第二个坐标。是否有任何方法可以交换文件中两列的选定值,即第2列和第3列。我在整个文件中有192个这样的实例。所以我的输出应该是

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

1 个答案:

答案 0 :(得分:0)

如果标志是否定的,只需更改标志:

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

命令末尾的1是一种在True中将某些内容设置为awk的方法,以便它执行默认行为:打印当前行。

相关问题