ubuntu - procesamiento de texto - Sustituir el comando de corte dentro del script AWK

CorePress2023-09-17  2

Tengo un archivo de texto estructurado test.tr y me gustaría analizarlo con un script AWK, pero por una razón especial quiero que todos los números estén rodeados de guiones bajos, por ejemplo: _0_ debería convertirse en 0. Esto es un ejemplo de archivo de texto de entrada: s 0.000000000 _0_ RTR

Así que estoy intentando usar el comando cortar dentro del script AWK de la siguiente manera:

# AWK script
BEGIN{
 # initialization
 highest_node_id = 0;
}
{
    node_id = 
    node_id = node_id | cut -d "_" -f2 | cut -d "_" -f1 ;# this line causes error 
    if (node_id > highest_node_id) {
        highest_node_id = node_id;
    }
}
END{
 #print results
}

Pero aparece un error

awk: `analyze.awk: line 37: syntax error at or near cut`

mientras que el mismo comando funciona bien en un script bash.

¿Qué debo hacer?

  • 2 Debes mostrar tu script completo y una muestra de la entrada y explicar el resultado que deseas. - Zanna 14 de septiembre de 2017 en 7:46
  • 1 Basado en su (deficiente) planteamiento del problema, sospecho que debería establecer un separador de varios caracteres apropiado, o usar el comando substr o gsub integrado de awk para eliminar el entorno. personajes yoen su lugar. Ver GNU awk: Funciones de manipulación de cadenas - conductor de acero 14 de septiembre de 2017 a las 9:03
  • @Zanna, steeldriver Gracias por tu respuesta.la modificación deseada realizada en la publicación original. -A. AlmasrI 14 de septiembre de 2017 a las 15:04


------------Respuesta------------

Finalmente logré que funcionara usando substr:

tmp_node_id = ;
node_id = substr(tmp_node_id, 2, (length(tmp_node_id) - 2));
printf ("node %s\n", node_id);



------------Respuesta------------

cut funciona en un script bash, pero shell es shell y awk es awk. Tampoco puedes usar comandos perl en scripts awk.

Si desea programas externos dentro de su script, necesita usar el comando del sistema, pero para lo que parece estar haciendo aquí, debe usar las funciones de cadena de awk como substr y gensub.


  • @ Philippos gracias por tu respuesta, quiero usar el comando cortar para extraer cadenasrodeado de guiones bajos, ya que estas cadenas representan la identificación del nodo, no puedo usar substr porque no sé el número total de caracteres que representan la identificación del nodo. Por favor, dame un ejemplo del uso del sistema dentro del script awk. Intento lo siguiente pero no funciona system("node_id | cut -d "_" -f2 | cut -d "_" -f1") -A. AlmasrI 22 de septiembre de 2017 a las 14:52
Su guía para un futuro mejor - libreflare
Su guía para un futuro mejor - libreflare