awk删除文本并在两个分隔符上拆分
我正在尝试使用awk删除文本并在两个分隔符上拆分,awk,Awk,我正在尝试使用awk删除最后一个数字后的文本,并按:分割。这对两行来说都是通用的,我相信下面的awk的第一部分可以做到这一点。如果行中没有\uuu,则$2会在$3中重复,我相信拆分可以做到这一点。我不知道怎么做,如果行中是\uu,则\u左侧的数字是$2,而\u右侧的数字是$3。谢谢:) 输入 chr7:140453136A>T chr7:140453135_140453136delCAinsTT 所需的 chr7 140453136 140453136 chr7 14
awk
删除最后一个数字后的文本,并按:
分割。这对两行来说都是通用的,我相信下面的awk
的第一部分可以做到这一点。如果行中没有\uuu
,则$2
会在$3
中重复,我相信拆分可以做到这一点。我不知道怎么做,如果行中是\uu
,则\u
左侧的数字是$2
,而\u
右侧的数字是$3
。谢谢:)
输入
chr7:140453136A>T
chr7:140453135_140453136delCAinsTT
所需的
chr7 140453136 140453136
chr7 140453135 140453136
awk
awk '{sub(/[^0-9]+$/, "", $1); {split($0,a,":"); print a[1],a[2]a[2]} 1' input
这里有一个:
$ awk '
BEGIN {
FS="[:_]" # using field separation for the job
OFS="\t"
}
{
sub(/[^0-9]*$/,"",$NF) # strip non-digits off the end of last field
if(NF==2) # if only 2 fields
$3=$2 # make the $2 from $2
}1' file # output
输出:
chr7 140453136 140453136
chr7 140453135 140453136
在GNU awk、mawk、Busybox awk和awk版本20121220上测试。以下是一个:
$ awk '
BEGIN {
FS="[:_]" # using field separation for the job
OFS="\t"
}
{
sub(/[^0-9]*$/,"",$NF) # strip non-digits off the end of last field
if(NF==2) # if only 2 fields
$3=$2 # make the $2 from $2
}1' file # output
输出:
chr7 140453136 140453136
chr7 140453135 140453136
在GNU awk、mawk、Busybox awk和awk版本20121220上测试。使用GNU awk:
awk -v FPAT='[0-9]+|chr[0-9]*' -v OFS='\t' 'NF==2{$3=$2}{$1=$1}1'
这取决于字段模式FPAT
,它是一个表示数字的正则表达式或带有数字的字符串chr
如果记录中只有2个字段,则语句NF==2{$3=$2}
将复制第二个字段
最后一条语句是强制awk重新生成具有所需格式的记录。使用GNU awk:
awk -v FPAT='[0-9]+|chr[0-9]*' -v OFS='\t' 'NF==2{$3=$2}{$1=$1}1'
这取决于字段模式FPAT
,它是一个表示数字的正则表达式或带有数字的字符串chr
如果记录中只有2个字段,则语句NF==2{$3=$2}
将复制第二个字段
最后一条语句是强制awk重新生成记录,使其具有所需的格式。请尝试以下更通用的解决方案,即无需硬编码将字段值复制到其他字段等,您只需在
awk
变量中提及字段值的最大数量,它将检查每一行(同时从其值中删除字母),并将最后一个值复制到该行的最大值末尾
awk -F'[:_]' -v max="3" '
{
for(i=2;i<=max;i++){
if($i==""){
$i=$(i-1)
}
gsub(/[^0-9]+/,"",$i)
}
}
1
' Input_file
awk-F'[:]'-v max=“3”'
{
对于(i=2;i您是否可以尝试以下更通用的解决方案,即无需硬编码将字段值复制到另一个字段等,您只需提及
awk
变量中字段值的最大数量,它将检查每一行(同时从其值中删除字母)并将最后一个值复制到该行的最大值末尾
awk -F'[:_]' -v max="3" '
{
for(i=2;i<=max;i++){
if($i==""){
$i=$(i-1)
}
gsub(/[^0-9]+/,"",$i)
}
}
1
' Input_file
awk-F'[:]'-v max=“3”'
{
对于(i=2;如果出现问题,请等待更长时间,您可能会得到一个bitchin'cool答案。相反,如果使用sub,您可以只执行
$NF+=0
。字符串到数字的转换规则将生效。当前版本将无法解决字符串1234gh5hsueNo问题,请等待更长时间,您可能会得到bitchin'cool答案。如果使用sub,您只需执行以下操作即可。)<代码>$NF+=0。字符串到数字的转换规则将生效。当前版本将在字符串1234gh5hsue上失败