Se as colunas que você quer dizer e conhecidas forem separadas por espaço, você poderá fazer o seguinte:
sed -E 's/^(([^ ]* ){3})POS=.*;GINFO=//' infile
Este ^(([^ ]* ){3})
corresponde a partir do início da linha ^
para qualquer coisa *
não é um espaço [^ ]
até que um primeiro espaço seja visto e repita isso para o máximo {3}
times; Os parênteses fazem essa correspondência como uma correspondência de agrupamento com referência de
, que depois a revertemos na peça de reposição s/pattern/replace/
.
Esse (...)POS=.*;GINFO=
também corresponde a POS=
seguido por qualquer coisa .*
till ;GINFO
visto e será removido da saída.
Para os dados de amostra abaixo indicados:
1 10241 POS=rs960927773 POS=10241;VP=0x05;GINFO=DDX11L1:100287102;R5;ASP
1 POS=10241 rs960927773 POS=10241;VP=0x05;GINFO=DDX11L1:100287102;R5;ASP
POS=1 10241 rs960927773 POS=10241;VP=0x05;GINFO=DDX11L1:100287102;R5;ASP
Irá retornar um resultado:
1 10241 POS=rs960927773 DDX11L1:100287102;R5;ASP
1 POS=10241 rs960927773 DDX11L1:100287102;R5;ASP
POS=1 10241 rs960927773 DDX11L1:100287102;R5;ASP
A versão POSIXly poderia ser:
sed 's/^\([^ ]* \)\([^ ]* \)\([^ ]* \)POS=.*;GINFO=//' infile