Разбить столбец на основе другого разделителя и применить условие - PullRequest
0 голосов
/ 26 октября 2018

Я фильтрую следующую таблицу:

1   12907284    EXON    0.4337370362636598|0.3641439953194638
1   22329062    INTRON  0.49293080505655357|0.49301629531094115
1   22332332    INTRON  0.016239257239498844|0.016134012660182183
1   24201919    EXON    0.6183022425084342|0.6181532611391254

Идея состояла бы в том, чтобы разделить столбец $4 разделителем |, взять первую подстроку и проверить условие, если оно истинно, то будет напечатана вся таблица. Для этого я применяю команду awk, но что-то не так, потому что она не работает должным образом:

awk 'BEGIN{FS=OFS="\t"} split($4, a, "\\|"); a[1] < 0.01 {print}' file.tsv

Любое предложение / исправление, пожалуйста? Спасибо!

Ответы [ 3 ]

0 голосов
/ 26 октября 2018

Ваш образец Input_file не выглядит с разделителем TAB, поэтому я делаю его как [[:space]]+, в случае, если ваш фактический Input_file является разделителем TAB, вы можете изменить -F значение на \t.

awk -F'[[:space:]]+' '{split($4,array,"|");if(array[1]<0.01){print}}'  Input_file
0 голосов
/ 27 октября 2018
awk '{split($4,a,/\|/)} a[1] < 0.01' file.tsv
0 голосов
/ 26 октября 2018

Если ваш ввод не принимает | где-либо еще, чем в вашем примере, вы можете использовать регулярное выражение в качестве разделителя полей, чтобы проанализировать две разные части вашего текущего 4-го поля как два разных поля:

awk -F'[\t|]' '$4 < 0.1 { print }'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...