根据其他定界符拆分列并应用条件

时间:2018-10-26 14:48:52

标签: awk delimited-text

我正在过滤下表:

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 :(得分:2)

如果您输入的内容在示例中没有接受|,则可以使用正则表达式作为字段分隔符,将当前第4个字段的两个不同部分解析为两个不同的字段:

awk -F'[\t|]' '$4 < 0.1 { print }'

答案 1 :(得分:1)

您的示例Input_file看起来似乎没有用TAB分隔,因此我将其设为[[:space]]+,如果您的实际Input_file是用TAB分隔的,则可以将-F的值更改为\t

awk -F'[[:space:]]+' '{split($4,array,"|");if(array[1]<0.01){print}}'  Input_file

答案 2 :(得分:1)

awk '{split($4,a,/\|/)} a[1] < 0.01' file.tsv