Usando sed
e column
:
$ sed -E 's/ intron_([^:]*):[^[:space:]]*/ /' file | column -t
id target_id length eff_length
1 FBgn0000721 1136 243.944268
1 FBgn0000721 1122 240.237419
2 FBgn0264373 56 0
A parte principal disso é o comando substituto:
s/ intron_([^:]*):\S*/ /
Ele procura intron_
e salva tudo depois de intron_
e antes dos primeiros dois pontos na variável 1
. [^[:space:]]*
corresponde tudo, desde o cólon até o final do campo. Tudo isso é substituído pelo texto salvo na variável 1
.
Usando awk
com saída separada por tabulação:
$ awk -v "OFS=\t" '{$2=$2;sub(/intron_/, "", $2); sub(/:.*/, "", $2); print}' file
id target_id length eff_length
1 FBgn0000721 1136 243.944268
1 FBgn0000721 1122 240.237419
2 FBgn0264373 56 0
Explicação:
-
-v "OFS=\t"
Isso define o separador de campo de saída como uma guia. Isso ajuda a alinhar as colunas, possivelmente tornando
column
desnecessário. -
$2=$2
Ao imprimir uma linha,
awk
não será alterado para nosso separador de campos de saída recém-especificado, a menos que alteremos algo na linha. Atribuir o segundo campo ao segundo campo é suficiente para garantir que a saída tenha tabulações. -
sub(/intron_/, "", $2)
Isso remove
intron_
do segundo campo. -
sub(/:.*/, "", $2)
Isso remove tudo após os dois primeiros pontos do segundo campo.
-
print
Isso imprime nossa nova linha.
Usando awk
com formatação de coluna personalizada
É como o acima, mas usa printf
para que possamos formatar as larguras e alinhamentos de colunas como desejar:
$ awk '{sub(/intron_/, "", $2); sub(/:.*/, "", $2); printf "%-3s %-12s %8s %3s\n",$1,$2,$3,$4}' file
id target_id length eff_length
1 FBgn0000721 1136 243.944268
1 FBgn0000721 1122 240.237419
2 FBgn0264373 56 0
Aqui, a instrução printf "%-3s %-12s %8s %3s\n",$1,$2,$3,$4
seleciona as larguras e alinhamentos da coluna no estilo usual printf
.
Usando sed
e convertendo de separado por tabulação para separado por vírgula
$ sed -E 's/ intron_([^:]*):[^[:space:]]*/ /; s/[[:space:]][[:space:]]*/,/g' file
id,target_id,length,eff_length
1,FBgn0000721,1136,243.944268
1,FBgn0000721,1122,240.237419
2,FBgn0264373,56,0