Awk 基于不同的分隔符拆分列并应用条件

Awk 基于不同的分隔符拆分列并应用条件,awk,delimited-text,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.6181

我正在筛选下表:

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

有什么建议/更正吗?谢谢

如果您的输入不接受|示例中以外的任何地方,您可以使用正则表达式作为字段分隔符,将当前第四个字段的两个不同部分解析为两个不同的字段:

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

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

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

您的示例输入_文件看起来没有制表符分隔符,因此我将其设置为[[:space]]+,如果您的实际输入_文件是制表符分隔的,那么您也可以将-F值更改为\t


您的示例输入_文件看起来没有制表符分隔符,因此我将其设置为[[:space]]+,如果您的实际输入_文件是制表符分隔的,那么您也可以将-F值更改为\t


对不起,这只是一个输入错误,我已经编辑过了。对不起,这只是一个输入错误,我已经编辑过了。你需要-F吗?在空白处拆分应该是默认行为,否?拆分的第三个参数是regexp,而不是字符串,因此使用regexp,而不是字符串分隔符。另外,a |作为regexp中的第一个字符,根据POSIX是未定义的行为。这里需要-F吗?在空白处拆分应该是默认行为,否?拆分的第三个参数是regexp,而不是字符串,因此使用regexp,而不是字符串分隔符。此外,根据POSIX,作为regexp中第一个字符的|也是未定义的行为。
awk '{split($4,a,/\|/)} a[1] < 0.01' file.tsv