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.