- 论坛徽章:
- 145
|
回复 1# 蓝色未央
$ awk -f reduce_by_min.awk
Usage: awk -f reduce_by_min.awk FILE
$ awk -f reduce_by_min.awk 1.txt
ENSMUSG00000000001 2142 2332 cds_0
ENSMUSG00000000001 4655 4808 cds_1
...
ENSMUSG00000000001 16403 16515 intron_6
ENSMUSG00000000001 16557 38608 intron_7
ENSMUSG00000000001 0 2036 utr3_0
ENSMUSG00000000001 2123 2142 utr3_1
ENSMUSG00000000001 38725 38866 utr5_0
ENSMUSG00000000003 0 28 cds_0
ENSMUSG00000000003 632 733 cds_1
ENSMUSG00000000003 1014 1124 cds_2
ENSMUSG00000000003 3136 3203 cds_3
ENSMUSG00000000003 6092 6231 cds_4
$ cat reduce_by_min.awk
BEGIN{
OFS = "\t";
if(ARGC != 2){
printf("Usage: %s -f reduce_by_min.awk FILE\n",ARGV[0], ARGV[1]);
exit 1;
}
ARGC=3;
ARGV[2] = ARGV[1];
}
# find minimum value
# ENSMUSG00000000001 108109422 108109612 cds_0
FNR==NR{
if(aMin[$1] == "" || aMin[$1] > $2)
aMin[$1] = $2;
next;
}
# reduce second and third items by minimum value
{
$2 -= aMin[$1];
$3 -= aMin[$1];
print;
}
|
|