Intentando utilizar este archivo...
MT 200610-1 100 2757
MT 200610-10 100 6753
MT 200610-100 100 15173
Quiere crear un nuevo archivo con este aspecto, usando las columnas 1,2 y 4...
chrMT 2756 2757 200610-1
chrMT 6752 6753 200610-10
chrMT 15172 15173 200610-100
Si solo hago los primeros tres así, 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
Si intento agregar la segunda columna al final, sucede algo extraño...
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
Si hago vim con la lista de configuración, muestra que es una pestaña normal, así que no estoy seguro de qué está pasando aquí con esa columna que está arruinando todo.
MT^I200610-1^I100^I2757$
MT^I200610-10^I100^I6753$
MT^I200610-100^I100^I15173$
Respuesta1
con dos
finales de línea 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
Con perl
para manejar tanto dos
el final de la línea de estilo como la obtención del resultado requerido:
$ 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
Con awk
, cambie el final de línea al unix
estilo primero, con dos2unix
si está disponible o conperl
$ 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$
y luego
$ 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
o, con GNU awk
, establezca el registro de entrada para manejar el final de línea estilo dos
gawk -v RS='\r\n' -v OFS='\t' '{print "chr"$1,$4-1,$4,$2}' ip.txt
Respuesta2
Coloque todo en la print
declaración en el formato deseado y realice cualquier operación necesaria, por ejemplo, la resta $NF - 1
también:
awk '{print "chr" $1, ($NF - 1), $NF, $2}' file.txt
Obviamente puedes usar $4
en lugar de $NF
aquí, pero como el cuarto campo es el último, ambos apuntarían al mismo campo.
Ejemplo:
% 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