Puedes deshacerte de la $((...)); La parte offy lenla ${var:off:len}sustitución ya se evalúan como expresiones aritméticas. Ejemplo: foo=01234567; echo "${foo:0:${#foo}/2} ${foo:${#foo}/2}". Eso está documentado, y es lo mismo en zshy ksh93como en bash.
mosvy
3
Nota: Si la longitud de la cadena es impar, esto aún la dividirá en dos partes, pero la segunda será un carácter más largo.
peterh - Restablece a Monica
8
Usando split, aquí cadenas y sustitución de comandos:
Tenga en cuenta que no funciona con mawk u busybox awk debido a la ambigüedad de sintaxis de la división /y el /ERE/operador, y el caso especial de ()ser opcional para length(aún esas implementaciones no son compatibles con POSIX en ese caso). Usar length()o length($0)aquí en lugar de lengthayudaría a aquellos. También podría hacer awk 'BEGIN{half = int(length(ARGV[1]) / 2); print substr(ARGV[1], 1, half) ORS substr(ARGV[1], half+1)}' abcdeflo que ahorraría la tubería y el proceso adicional y lo haría funcionar incluso si la cadena contiene caracteres de nueva línea.
Stéphane Chazelas
1
Python 3
s = input()# Take one line of input from stdin.
x = len(s)//2# Get middle of string. "//" is floor division
print(s[:x], s[x:], sep="\n")# Print "s" up to "x", then "s" past "x", joined on newlines.
Respuestas:
Usando la expansión de parámetros y la aritmética de shell :
La primera mitad de la variable será:
La segunda mitad de la variable será:
para que puedas usar:
También puede usar el siguiente comando awk:
fuente
$((...)); La parteoffylenla${var:off:len}sustitución ya se evalúan como expresiones aritméticas. Ejemplo:foo=01234567; echo "${foo:0:${#foo}/2} ${foo:${#foo}/2}". Eso está documentado, y es lo mismo enzshyksh93como en bash.Usando
split, aquí cadenas y sustitución de comandos:fuente
Otro
awkscript puede ser:fuente
/y el/ERE/operador, y el caso especial de()ser opcional paralength(aún esas implementaciones no son compatibles con POSIX en ese caso). Usarlength()olength($0)aquí en lugar delengthayudaría a aquellos. También podría hacerawk 'BEGIN{half = int(length(ARGV[1]) / 2); print substr(ARGV[1], 1, half) ORS substr(ARGV[1], half+1)}' abcdeflo que ahorraría la tubería y el proceso adicional y lo haría funcionar incluso si la cadena contiene caracteres de nueva línea.Python 3
Por ejemplo,
Si la longitud de la cadena no es un número par, la segunda línea será más larga. P.ej
fuente