2016-10-17 5 views
0

Я пытаюсь выполнить следующую команду AWKматематики в AWK колонках

awk '{ if($3-$2 >= 1000) print $1"\t"$3-1000"\t"$3"\t"$4"\t"$5 ; else if($3-$2 < 1000) print $1"\t"$3-($3-$2/2)"\t"$3"\t"$4"\t"$5 }'file 

где, если вычитание между колонкой 3 и 2 составляет> 1000, то следовать определенному условию, иначе следовать другому условию, в котором столбец 2 является column3- (column3-column2/2) целым числом. Файл выглядит следующим образом:

chrX 99885864 99887481 I7 - 
    chrX 99887566 99888401 I6 - 
    chrX 99888537 99888927 I5 - 
    chrX 99889027 99890174 I4 - 
    chrX 99890250 99890554 I3 - 
    chrX 99890744 99891187 I2 - 
    chrX 99892102 99894941 I1 - 
chr20 49552800 49557401 I8 - 
chr20 49557493 49557641 I7 - 
chr20 49557747 49558567 I6 - 
+0

Какая ошибка вы получаете? – CoconutBandit

+0

я получаю что-то вроде: chrX \t 4.99443e + 07 \t 99888927 I5 или chr20 \t 2.47787e + 07 \t 49557641 I7 вместо целых чисел – AishwaryaKulkarni

+0

Check [это сообщение] (http://stackoverflow.com/a/12714193/3865495) вне. похоже, что вы не хотите, чтобы научная нотация, что 'print' по умолчанию – CoconutBandit

ответ

2

вам необходимо перезаписать awk по умолчанию или формат в явном виде.

$ awk -v OFS='\t' '{$2=sprintf("%d",$3-(($3-$2>=1000)?1000:$2/2))}1' file 

chrX 99886481  99887481  I7  - 
chrX 49944618  99888401  I6  - 
chrX 49944658  99888927  I5  - 
chrX 99889174  99890174  I4  - 
chrX 49945429  99890554  I3  - 
chrX 49945815  99891187  I2  - 
chrX 99893941  99894941  I1  - 
chr20 49556401  49557401  I8  - 
chr20 24778894  49557641  I7  - 
chr20 24779693  49558567  I6  - 

пс. Я думаю, что ваша формула не подходит для условия else, иначе измените мой сценарий.

+0

hi karakfa благодарит много, я должен был быть более конкретным, это была column3- (column3-column2/2), так что вместо 49944618 это будет 99888401-99887566 = 835 и разделите это на 2, что даст 417.5, а я вычитаю 417 из 99888401, чтобы получить 99887984. Я просто не знаю, как добавить деление в этот пункт::. – AishwaryaKulkarni

+0

'$ 3 - ($ 3- $ 2/2) = $ 2/2' вы имели в виду' $ 3 - ($ 3- $ 2)/2'? Если так, замените '$ 2/2' в скрипте' ($ 3- $ 2)/2' – karakfa

+0

О да, правильно, извините, я смутил себя, когда это было так очевидно, спасибо! – AishwaryaKulkarni

 Смежные вопросы

  • Нет связанных вопросов^_^