Vous pouvez vous débarrasser de la $((...)); la offet une lenpartie de la ${var:off:len}substitution sont déjà évalués comme des expressions arithmétiques. Exemple: foo=01234567; echo "${foo:0:${#foo}/2} ${foo:${#foo}/2}". C'est documenté, et c'est la même chose dans zshet ksh93comme dans bash.
mosvy
3
Remarque: Si la longueur de la chaîne est impaire, cela la divisera toujours en deux parties, mais la seconde sera un caractère plus long.
peterh
8
En utilisant split, ici les chaînes et la substitution de commandes:
Notez qu'il ne fonctionne pas avec mawk ou busybox awk en raison de l'ambiguïté de la syntaxe de la division /et de l' /ERE/opérateur, et du cas particulier d' ()être facultatif pour length(toujours ces implémentations ne sont pas conformes POSIX dans ce cas). Utiliser length()ou length($0)ici au lieu de lengthserait utile pour ceux-ci. Vous pouvez également faire awk 'BEGIN{half = int(length(ARGV[1]) / 2); print substr(ARGV[1], 1, half) ORS substr(ARGV[1], half+1)}' abcdefce qui sauverait le canal et le processus supplémentaire et le ferait fonctionner même si la chaîne contient des caractères de nouvelle ligne.
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.
Réponses:
Utilisation de l' expansion des paramètres et de l' arithmétique du shell :
La première moitié de la variable sera:
La seconde moitié de la variable sera:
afin que vous puissiez utiliser:
Vous pouvez également utiliser la commande awk suivante:
la source
$((...))
; laoff
et unelen
partie de la${var:off:len}
substitution sont déjà évalués comme des expressions arithmétiques. Exemple:foo=01234567; echo "${foo:0:${#foo}/2} ${foo:${#foo}/2}"
. C'est documenté, et c'est la même chose danszsh
etksh93
comme dans bash.En utilisant
split
, ici les chaînes et la substitution de commandes:la source
Un autre
awk
script peut être:la source
/
et de l'/ERE/
opérateur, et du cas particulier d'()
être facultatif pourlength
(toujours ces implémentations ne sont pas conformes POSIX dans ce cas). Utiliserlength()
oulength($0)
ici au lieu delength
serait utile pour ceux-ci. Vous pouvez également faireawk 'BEGIN{half = int(length(ARGV[1]) / 2); print substr(ARGV[1], 1, half) ORS substr(ARGV[1], half+1)}' abcdef
ce qui sauverait le canal et le processus supplémentaire et le ferait fonctionner même si la chaîne contient des caractères de nouvelle ligne.Python 3
Par exemple,
Si la longueur de la chaîne n'est pas un nombre pair, la deuxième ligne sera plus longue. Par exemple
la source