Tenho um arquivo com mais de 200 colunas. Como propósito de exemplo, estou aqui usando um arquivo com menor número de colunas(9). Abaixo está o arquivo de entrada (algumas linhas)
chr10 181243 225933 1 1 1 10 0 36
chr10 181500 225933 1 1 1 106 0 35
chr10 226069 255828 1 1 1 57 0 37
chr10 243946 255828 1 1 1 4 0 27
chr10 255989 267134 1 1 1 87 0 32
chr10 255989 282777 1 1 1 61 0 34
chr10 267297 282777 1 1 1 61 0 37
chr10 282856 283524 1 1 1 92 0 35
chr10 282856 285377 1 1 1 1 0 15
chr10 283618 285377 1 1 1 72 0 33
Eu quero reorganizar o arquivo de forma que minha última coluna (aqui a 9ª coluna) seja a 4ª coluna no arquivo de saída e depois imprimir todo o resto. Portanto, a saída que estou procurando é
chr10 181243 225933 36 1 1 1 10 0
chr10 181500 225933 35 1 1 1 106 0
chr10 226069 255828 37 1 1 1 57 0
chr10 243946 255828 27 1 1 1 4 0
chr10 255989 267134 32 1 1 1 87 0
chr10 255989 282777 34 1 1 1 61 0
chr10 267297 282777 37 1 1 1 61 0
chr10 282856 283524 35 1 1 1 92 0
chr10 282856 285377 15 1 1 1 1 0
chr10 283618 285377 33 1 1 1 72 0
Em um arquivo com menor número de colunas, posso usar algo assim para obter a saída acima:
awk -v OFS="\t" '{print $1,$2,$3,$9,$4,$5,$6,$7,$8}'
Se agora eu tenho um arquivo com um grande número de colunas, como posso colocar a última coluna do arquivo como a 4ª coluna e o resto eu imprimo como está?
Perl é muito conciso para isso: divida cada linha em palavras, retire a última palavra e insira-a no índice 3 (baseado em 0)
Para substituir o quarto campo pelo último campo:
Para inserir o último campo antes do quarto campo, temos que ser um pouco criativos:
Isso preservará o campo final, percorrerá todos os campos e moverá cada um para trás para o quarto para frente e, em seguida, colocará o quarto campo desejado no lugar: