Awk 每隔一列合并一次
正在尝试合并中从Awk 每隔一列合并一次,awk,gsub,Awk,Gsub,正在尝试合并中从$3开始的每隔一个tab delim列 NC_044998.1 3757 ref ref ref ref ref ref ref ref ref dev 所以输出是 NC_044998.1 3757 refref refref refref refref refdev 使用 awk'BEGIN{FS=“\t”}{for(i=3;iWithGNUa
$3开始的每隔一个tab delim列
NC_044998.1 3757 ref ref ref ref ref ref ref ref ref dev
所以输出是
NC_044998.1 3757 refref refref refref refref refdev
使用
awk'BEGIN{FS=“\t”}{for(i=3;iWithGNUawk:
awk 'BEGIN {FS=OFS="\t"} { for (i=0; i<5; i++){$(i+3)=$(i*2+3) $(i*2+4)} NF=7; print }' input
awk'BEGIN{FS=OFS=“\t”}{对于(i=0;i使用gnu-awk
,可以使用正则表达式:
awk -F '\t' -v beg=2 '{
s=""
for (i=1; i<=beg; ++i)
s = s $i FS;
print s gensub( /\t+(\S+\t*)/, "\\1", "g", substr($0, length(s)+1) )
}' file
PS:您可以在此awk命令中将任何其他列位置作为beg
参数如果使用\t
作为列分隔符,则列本身不能再包含分隔符。谢谢!事实上,我的文件有53列,我想开始从第32列开始彼此合并。因此它将成为awk'BEGIN{FS=“\t”}{for(i=0;iI假设:awk-v start=32-v end=53'{FS=OFS=“\t”}{for(i=0;i)
NC_044998.1 3757 refref refref refref refref refdev
awk -F '\t' -v beg=2 '{
s=""
for (i=1; i<=beg; ++i)
s = s $i FS;
print s gensub( /\t+(\S+\t*)/, "\\1", "g", substr($0, length(s)+1) )
}' file
NC_044998.1 3757 refref refref refref refref refdev