Tentando usar este arquivo...
MT 200610-1 100 2757
MT 200610-10 100 6753
MT 200610-100 100 15173
Quer criar um novo arquivo parecido com este, usando as colunas 1,2 e 4...
chrMT 2756 2757 200610-1
chrMT 6752 6753 200610-10
chrMT 15172 15173 200610-100
Se eu fizer apenas os três primeiros assim, funciona.
awk 'BEGIN{FS=="\t";OFS=="\t"}{print "chr"$1,$4-1,$4}' test_ace_geno1.map
chrMT 2756 2757
chrMT 6752 6753
chrMT 15172 15173
Se eu tentar adicionar a segunda coluna no final, algo estranho acontece...
awk 'BEGIN{FS=="\t";OFS=="\t"}{print "chr"$1,$4-1,$4,$2}' test_ace_geno1.map
200610-16 2757
200610-10 6753
200610-100 15173
Se eu fizer o vim com set list, ele mostra que é uma aba normal, então não tenho certeza do que está acontecendo aqui com aquela coluna que está bagunçando tudo.
MT^I200610-1^I100^I2757$
MT^I200610-10^I100^I6753$
MT^I200610-100^I100^I15173$
Responder1
com dos
finais de linha de estilo:
$ cat -e ip.txt
MT 200610-1 100 2757^M$
MT 200610-10 100 6753 ^M$
MT 200610-100 100 15173^M$
$ awk 'BEGIN{FS=="\t";OFS=="\t"}{print "chr"$1,$4-1,$4}' ip.txt
chrMT 2756 2757
chrMT 6752 6753
chrMT 15172 15173
$ awk 'BEGIN{FS=="\t";OFS=="\t"}{print "chr"$1,$4-1,$4,$2}' ip.txt
200610-16 2757
chrMT 6752 6753 200610-10
200610-100 15173
Com perl
para lidar com dos
o final da linha de estilo e obter a saída necessária:
$ perl -lane 'print "chr$F[0]\t", $F[3]-1, "\t$F[3]\t$F[1]"' ip.txt
chrMT 2756 2757 200610-1
chrMT 6752 6753 200610-10
chrMT 15172 15173 200610-100
Com awk
, altere o final da linha para unix
o estilo primeiro, com dos2unix
se disponível ou comperl
$ perl -i -pe 's|\r\n|\n|' ip.txt
$ cat -e ip.txt
MT 200610-1 100 2757$
MT 200610-10 100 6753 $
MT 200610-100 100 15173$
e então
$ awk -v OFS='\t' '{print "chr"$1,$4-1,$4,$2}' ip.txt
chrMT 2756 2757 200610-1
chrMT 6752 6753 200610-10
chrMT 15172 15173 200610-100
ou, com GNU awk
, defina o registro de entrada para lidar com o final de linha no estilo dos
gawk -v RS='\r\n' -v OFS='\t' '{print "chr"$1,$4-1,$4,$2}' ip.txt
Responder2
Coloque tudo na print
instrução no formato desejado e faça qualquer operação necessária, por exemplo, a subtração $NF - 1
também:
awk '{print "chr" $1, ($NF - 1), $NF, $2}' file.txt
Obviamente você pode usar $4
em vez de $NF
aqui, mas como o quarto campo é o último, ambos apontariam para o mesmo campo.
Exemplo:
% awk '{print "chr" $1, ($NF - 1), $NF, $2}' file.txt
chrMT 2756 2757 200610-1
chrMT 6752 6753 200610-10
chrMT 15172 15173 200610-100