Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

336
Vistas
Cómo reemplazar un número por otro número en una columna específica usando awk

Esto es probablemente básico, pero soy completamente nuevo en la línea de comandos y uso awk. Tengo un archivo como este:

 1 RQ22067-0 -9 2 RQ34365-4 1 3 RQ34616-4 1 4 RQ34720-1 0 5 RQ14799-8 0 6 RQ14754-1 0 7 RQ22101-7 0 8 RQ22073-1 0 9 RQ30201-1 0

Quiero que los 0 cambien a 1 en la columna 3. Y cualquier ocurrencia de 1 y 2 para cambiar a 2 en la columna 3. Básicamente, solo cambio los números en la columna 3. Pero no estoy cambiando el -9.

 1 RQ22067-0 -9 2 RQ34365-4 2 3 RQ34616-4 2 4 RQ34720-1 1 5 RQ14799-8 1 6 RQ14754-1 1 7 RQ22101-7 1 8 RQ22073-1 1 9 RQ30201-1 1

He intentado usar (ver más abajo) pero no ha funcionado

 >> awk '{gsub("0","1",$3)}1' PRS_with_minus9.pheno.txt > PRS_with_minus9_modified.pheno >> awk '{gsub("1","2",$3)}1' PRS_with_minus9.pheno.txt > PRS_with_minus9_modified.pheno

Gracias.

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Con este código en tu pregunta:

 awk '{gsub("0","1",$3)}1' PRS_with_minus9.pheno.txt > PRS_with_minus9_modified.pheno awk '{gsub("1","2",$3)}1' PRS_with_minus9.pheno.txt > PRS_with_minus9_modified.pheno
  1. está ejecutando ambos comandos en el mismo archivo de entrada y escribiendo su salida en el mismo archivo de salida, por lo que solo la salida del segundo script estará presente en la salida, y

  2. está tratando de cambiar 0 a 1 primero y LUEGO cambiar 1 a 2 para que los $3 que comienzan como 0 terminen como 2, debe cambiar el orden de las operaciones.

Esto es lo que debería estar haciendo, usando su código existente:

 awk '{gsub("1","2",$3); gsub("0","1",$3)}1' PRS_with_minus9.pheno.txt > PRS_with_minus9_modified.pheno

Por ejemplo:

 $ awk '{gsub("1","2",$3); gsub("0","1",$3)}1' file 1 RQ22067-0 -9 2 RQ34365-4 2 3 RQ34616-4 2 4 RQ34720-1 1 5 RQ14799-8 1 6 RQ14754-1 1 7 RQ22101-7 1 8 RQ22073-1 1 9 RQ30201-1 1

El gsub() también debería ser simplemente sub() s ya que solo desea realizar cada sustitución una vez, y no necesita encerrar los números entre comillas, por lo que podría hacer:

 awk '{sub(1,2,$3); sub(0,1,$3)}1' file
over 4 years ago · Santiago Trujillo Denunciar

0

Puede verificar el valor de la columna 3 y luego actualizar el valor del campo.

Verifique 1 como primera regla porque si la primera verificación es 0, el valor se establecerá en 1 y la siguiente verificación establecerá el valor en 2, lo que dará como resultado todos 2.

 awk ' { if($3==1) $3 = 2 if($3==0) $3 = 1 } 1' file

Producción

 1 RQ22067-0 -9 2 RQ34365-4 2 3 RQ34616-4 2 4 RQ34720-1 1 5 RQ14799-8 1 6 RQ14754-1 1 7 RQ22101-7 1 8 RQ22073-1 1 9 RQ30201-1 1
over 4 years ago · Santiago Trujillo Denunciar

0

Con las muestras mostradas y los operadores ternarios, intente seguir el código. La explicación simple sería verificar la condición si el tercer campo es 1, luego configurarlo en 2, de lo contrario, verificar si es 0, luego configurarlo en 0, de lo contrario, mantenerlo como está, finalmente imprimir la línea.

 awk '{$3=$3==1?2:($3==0?1:$3)} 1' Input_file


Solución genérica: agregando una solución genérica aquí, donde podemos tener 3 variables awk llamadas: fieldNumber en las que puede mencionar todos los números de campo que queremos verificar. El segundo es: existValue que queremos hacer coincidir (en condición) y el tercero es: newValue nuevo valor que debe estar allí después del reemplazo.

 awk -v fieldNumber="3" -v existValue="1,0" -v newValue="2,1" ' BEGIN{ num=split(fieldNumber,arr1,",") num1=split(existValue,arr2,",") num2=split(newValue,arr3,",") for(i=1;i<=num1;i++){ value[arr2[i]]=arr3[i] } } { for(i=1;i<=num;i++){ if($arr1[i] in value){ $arr1[i]=value[$arr1[i]] } } } 1 ' Input_file
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda