A linha de cabeçalho é um caso especial, então você pode lidar com isso como um caso especial.
awk -F '*' -v OFS='\t' \
'NR == 1 { sub(/^gene/, "&" OFS "coord"); print; next }
{ print $1, $2 }'
Eu tenho um arquivo grande neste formato, cujas primeiras linhas estou mostrando a você incluindo o cabeçalho.
gene c1 c2 c3 c4 c5 c6 c7 c8
G1*1 0 0 0 0 0 0 0 0
G2*2 0 0 0 0 1 1 1 1
G3*3 0 0 2 2 44 44 62 62
G4*4 22 0 46 0 1308 7 1773 4
A primeira linha com o gene é a linha de cabeçalho. Eu quero mantê-lo como está e, em seguida, quero dividir a linha restante com FS = *, de modo que agora eu tenho um arquivo parecido com isso como saída
gene coord c1 c2 c3 c4 c5 c6 c7 c8
G1 1 0 0 0 0 0 0 0 0
G2 2 0 0 0 0 1 1 1 1
G3 3 0 0 2 2 44 44 62 62
G4 4 22 0 46 0 1308 7 1773 4
Então eu também quero colocar um campo extra na linha de cabeçalho chamada 'coord', para que quando eu dividir as linhas subseqüentes eu tenha tudo ordenado.
Eu sei como usar o awk para dividir, mas a linha de cabeçalho é o que está me confundindo
awk -F '*' -v OFS="\t" '{print $1,$2}' ##This is for 2nd line and onwards
A linha de cabeçalho é um caso especial, então você pode lidar com isso como um caso especial.
awk -F '*' -v OFS='\t' \
'NR == 1 { sub(/^gene/, "&" OFS "coord"); print; next }
{ print $1, $2 }'
O uso de awk
é um requisito absoluto? Isso parece mais um trabalho para sed
:
sed '1s/gene/& coord/;2,$s/\*/ /'
que é quase auto-explicativo:
1s/gene/& coord/
- na primeira linha, mude “gene” para “gene coord”. 2,$s/\*/ /
- na segunda linha até o final do arquivo,
mude o literal “*” para o espaço em branco. Aqui está outra abordagem:
awk -F '[ \t*]' -v OFS='\t' 'NR==1{$2="coord\t"$2;print;next}{$1=$1}1' file
O arquivo de entrada não estava claro para mim, então usei 3 separadores de campo: espaço, tabulação e *
. Provavelmente, você pode remover algo da lista se agora sua entrada for melhor.
$1=$1
basicamente não faz nada, é necessário reorganizar os campos (use o novo separador de campos em todos os lugares)
final 1
é usado apenas para imprimir tudo após a modificação.
Tags awk