替换多列中的值

时间:2014-07-02 03:19:58

标签: python perl awk

之前已经问过这个问题但我的问题非常具体,因此我发布了这个问题。

我有一个看起来像这样的文件:

chr10 100008748 100010821 2 2 1
chr10 100011459 100012109 2 2 1
chr10 100015496 100016536 2 2 1
chr10 100017921 100018765 2 2 1
chr10 100018985 100019147 2 2 1
chr10 100022808 100027387 2 2 0
chr10 100143625 100144703 2 2 1
chr10 100144824 100146957 2 2 1
chr10 100144941 100146957 2 2 0
chr10 100147064 100148110 2 2 1

我的任务是用'。'替换第6列值。 (期间)和第5列+/-。如果$ 5中的值为1,则“ - ”否则为“+”。

我已经尝试了一些python和perl脚本以及一些awk命令,但对我来说并没有太多帮助。

非常感谢pesudocode,谢谢你的时间。

**使用AWK **

BEGIN { FS=OFS=' ' } 
> $6 == "1" { $6 == "." }
> $6 == "0" { $6 == "." }
> 1
> ' Illumina_Heart_Gencode_AlignedSJ_cut.bed > test2.bed

awk '{ gsub(".",$6); print $1,$2,$3,$4,$5,$6}' Illumina_Heart_Gencode_AlignedSJ_cut.bed > test.bed

试图找到Perl和Python文件,但我想我删除了它们。

1 个答案:

答案 0 :(得分:5)

通过awk,

$ awk '{$6="."; if ($5==1){$5="-"} else $5="+"}1' file
chr10 100008748 100010821 2 + .
chr10 100011459 100012109 2 + .
chr10 100015496 100016536 2 + .
chr10 100017921 100018765 2 + .
chr10 100018985 100019147 2 + .
chr10 100022808 100027387 2 + .
chr10 100143625 100144703 2 + .
chr10 100144824 100146957 2 + .
chr10 100144941 100146957 2 + .
chr10 100147064 100148110 2 + .

它用.替换第6列值,如果第5列的值为1,则它将第5列中的所有字符替换为-,否则它将替换所有值+