awk parámetro dividido por char

el archivo es:

BASH.NIR SH.ABI 

Quiero el script awk para mostrar:

User is NIR, SHELL is BASH User is ABI, SHELL is SH 

No sé cómo dividir un parámetro por carácter. La idea es:

cat file.txt | awk "{print "User is " afterDot($1) ", SHELL is " beforeDot($1)}" 

Responder

Puede usar las funciones de cadena en awk.

$ (echo BASH.NIR; echo SH.ABI FOOBAR) | awk "{p=index($1,".");print "User is", substr($1,p+1) ", SHELL IS", substr($1,0,p-1)}" User is NIR, SHELL IS BASH User is ABI, SHELL IS SH 

La función index devuelve la posición del carácter que se busca (en este caso, un punto). Y strstr devolverá una subcadena. Usamos p+1 y p-1 para no incluir el punto.

Para obtener más información, consulte la sección «Funciones de cadena» de la awk página de manual.

Respuesta

Puede usar . como separador de campo:

awk -F. "{ print "User is " $2 ", SHELL is " $1 }" file.txt 

Comentarios

  • el archivo de texto puede También tengo espacios en blanco
  • @nir Pegue una muestra de su entrada exacta en su pregunta. No puedo ' adivinar qué aspecto tiene. me gusta a menos que lo represente correctamente.
  • @nir – es ' siempre mejor incluir datos de ejemplo reales. Los datos manipulados generalmente solo desperdician el tiempo ' s de la respuesta, ya que generalmente conducen a las soluciones incorrectas.
  • tiene razón, lo hará la próxima vez.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *