Como você mencionou que os dados estão sempre nas mesmas colunas, o AWK é apropriado para essa tarefa. No entanto pequena coisa é que você tem dados que é até certo ponto tem espaço como separador, mas depois muda para usando barra vertical como separador. Assim, precisamos de um pouco mais de hackers AWK complexos.
awk '{gsub(/[;]/," ");printf "%s %s ",$1,$2; for(i=1;i<=NF;i++){ if($i~/\|\|\|/) {gsub(/\|/," ");printf "%s %s",$(i+1),$(i+5);break} } printf "\n"; }' testData.txt
Para colocar o código acima em forma de script,
#!/usr/bin/awk -f
{
gsub(/[;]/," ");
printf "%s %s ",$1,$2;
for(i=1;i<=NF;i++){
if($i~/\|\|\|/) {
gsub(/\|/," ");
printf "%s %s",$(i+1),$(i+5);
break
}
}
printf "\n";
}
Coloque isso em um arquivo, chame-o de myScript.awk
ou qualquer coisa, adicione permissões exec com chmod +x myScript.awk
e forneça o arquivo de entrada como argumento
Execução da amostra:
$ chmod +x dataExtract.awk
$ ./dataExtract.awk testData.txt
2 41620CSQ=G missense_variant
Nota: na pergunta que você disse, missense_variant
é o quarto campo, mas na verdade é o quinto campo no exemplo que você postou. Eu ajustei de acordo
Edite conforme solicitado nos comentários:
#!/usr/bin/awk -f
{
gsub(/[;]/," ");
printf "%s\t%s\t",$1,$2;
for(i=1;i<=NF;i++){
if($i~/\|\|\|/) {
gsub(/\|/," ");
printf "%s\n" $(i+5);
break
}
}
}