Agradecemos tu ayuda para difundir nuestras crónicas en referencia a las ciencias de la computación.
Solución:
Solo desea establecer el separador de campo como .
utilizando el -F
e imprime el primer campo:
$ echo aaa0.bbb.ccc | awk -F'.' 'print $1'
aaa0
Lo mismo pero usando cut:
$ echo aaa0.bbb.ccc | cut -d'.' -f1
aaa0
O con sed
:
$ echo aaa0.bbb.ccc | sed 's/[.].*//'
aaa0
Incluso grep
:
$ echo aaa0.bbb.ccc | grep -o '^[^.]*'
aaa0
Estoy preguntando en general, cómo escribir un script awk compatible que realice la misma funcionalidad…
Resolver el problema en su pregunta es fácil. (compruebe la respuesta de los demás).
Si desea escribir un script awk, que sea portátil para cualquier implementación y versión de awk (gawk/nawk/mawk…) es realmente difícil, incluso si tiene –posix (gawk)
por ejemplo:
- algo de awk funciona string en cuanto a caracteres, algunos con bytes
- algunos soportes
x
escapar, algunos no FS
intérprete funciona de manera diferente- restricción de abreviatura de palabras clave/palabras reservadas
- alguna restricción de operador, por ejemplo, **
- incluso el mismo awk impl. (Gawk por ejemplo), la versión 4.0 y 3.x también tienen diferencias.
- la implementación de ciertas funciones también son diferentes. (su problema es un ejemplo, ver más abajo)
bueno, todos los puntos anteriores solo se hablan en general. Volviendo a su problema, su problema solo está relacionado con la característica fundamental de awk. awk 'print $x'
la línea así funcionará todos los awks.
Hay dos razones por las que su línea awk se comporta de manera diferente en gawk y mawk:
-
tu usado
substr()
funcionar mal. esta es la causa principal. tu tienessubstr($0, 0, RSTART - 1)
los0
debiera ser1
, no importa qué awk uses. awk array, string idx, etc. están basados en 1. -
gawk y mawk implementados
substr()
diferentemente.
O simplemente use cortar:
echo aaa0.bbb.ccc | cut -d'.' -f1
Te mostramos las comentarios y valoraciones de los usuarios
Si te gusta la programación, puedes dejar una división acerca de qué te ha gustado de esta crónica.