【发布时间】:2018-11-25 13:28:20
【问题描述】:
下面的awk 捕获下面input 中第1-5 行的所需输出。我在第六行苦苦挣扎,似乎无法在awk 中添加一部分来捕获和打印所需输出中的第 6 行。打印id 以及- 之后的部分。我尝试添加拆分,但仅在字段 5 中打印数字。对于试图包含详细信息的长帖子,我深表歉意,因为我似乎无法弄清楚这一点。谢谢你:)
试了试
{
split($4,F,/_/)
if(split($4,A,/[_]/)) {
if(A[2]~/[[:alpha:]]/)
p=A[2]
}
}
{
print "chr" $1, $2, $3, "chr" $1 ":" $2 "-" $3 OFS p
}
输入 tab-delimeted
6 18122723 18122843 469_380805_378884(NHLRC1)_1.1_1
6 31114121 31114241 344047_16724314_rs746647_1
6 31430946 31431066 344049_16724385_HCP5(10866)_1_1
6 32808479 32808599 445446_18754304_PSMB8-exon6_1
1 33478785 33478905 19186497_AK2-Exon1_1
1 24022788 24022908 466743_18956150_RPL11-NM_000975-exon6_1
想要的输出 tab-delimeted
chr6 18122723 18122843 chr6:18122723-18122843 NHLRC1
chr6 31114121 31114241 chr6:31114121-31114241 rs746647
chr6 31430946 31431066 chr6:31430946-31431066 HCP5
chr6 32808479 32808599 chr6:32808479-32808599 PSMB8-exon6
chr1 33478785 33478905 chr1:33478785-33478905 AK2-Exon1
chr1 24022788 24022908 chr1:24022788-24022908 RPL11-exon6
awk
awk '
{
split($4,F,/_/)
if(split(F[3],G,/[)(]/)) {
if(G[2]~/[[:alpha:]]/)
p=G[2]
else
p=G[1]
}
else
p=F[3]
}
{
split($4,F,/_/)
if(split($4,A,/[_]/)) {
if(A[2]~/[[:alpha:]]/)
p=A[2]
}
}
{
print "chr" $1, $2, $3, "chr" $1 ":" $2 "-" $3 OFS p
}
' FS='\t' OFS='\t' input
电流输出 tab-delimeted
chr6 18122723 18122843 chr6:18122723-18122843 NHLRC1
chr6 31114121 31114241 chr6:31114121-31114241 rs746647
chr6 31430946 31431066 chr6:31430946-31431066 HCP5
chr6 32808479 32808599 chr6:32808479-32808599 PSMB8-exon6
chr1 33478785 33478905 chr1:33478785-33478905 AK2-Exon1
chr1 24022788 24022908 chr1:24022788-24022908 RPL11-NM
【问题讨论】:
-
似乎没有定义拒绝
NM令牌的规则。它有 alpha char 如果这是手动完成的,你如何向某人描述它?例如为什么接受 RPL11 但拒绝 NM_000975
标签: awk