Możesz pozbyć się $((...)); offi lenczęść ${var:off:len}zastąpienia już ocenić jako wyrażeń arytmetycznych. Przykład: foo=01234567; echo "${foo:0:${#foo}/2} ${foo:${#foo}/2}". Który jest udokumentowany, a to samo w zshi ksh93jak w bashu.
mosvy
3
Uwaga: Jeśli długość łańcucha jest nieparzysta, nadal będzie on dzielony na dwie części, ale druga będzie dłuższa.
peterh - Przywróć Monikę
8
Używając splittutaj ciągów znaków i podstawiania poleceń:
Zauważ, że nie działa z mawk lub busybox awk ze względu na dwuznaczność składni dzielenia /i /ERE/operatora oraz szczególny przypadek ()opcjonalności length(wciąż te implementacje nie są w tym przypadku zgodne z POSIX). Użycie length()lub length($0)tutaj zamiast lengthpomógłoby im. Możesz także zrobić to, awk 'BEGIN{half = int(length(ARGV[1]) / 2); print substr(ARGV[1], 1, half) ORS substr(ARGV[1], half+1)}' abcdefco oszczędziłoby potok i dodatkowy proces i sprawiłoby, że działało, nawet jeśli ciąg znaków zawiera znaki nowej linii.
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.
Odpowiedzi:
Używanie rozszerzania parametrów i arytmetyki powłoki :
Pierwsza połowa zmiennej będzie:
Druga połowa zmiennej będzie:
więc możesz użyć:
Możesz także użyć następującego polecenia awk:
źródło
$((...))
;off
ilen
część${var:off:len}
zastąpienia już ocenić jako wyrażeń arytmetycznych. Przykład:foo=01234567; echo "${foo:0:${#foo}/2} ${foo:${#foo}/2}"
. Który jest udokumentowany, a to samo wzsh
iksh93
jak w bashu.Używając
split
tutaj ciągów znaków i podstawiania poleceń:źródło
Innym
awk
skryptem może być:źródło
/
i/ERE/
operatora oraz szczególny przypadek()
opcjonalnościlength
(wciąż te implementacje nie są w tym przypadku zgodne z POSIX). Użycielength()
lublength($0)
tutaj zamiastlength
pomógłoby im. Możesz także zrobić to,awk 'BEGIN{half = int(length(ARGV[1]) / 2); print substr(ARGV[1], 1, half) ORS substr(ARGV[1], half+1)}' abcdef
co oszczędziłoby potok i dodatkowy proces i sprawiłoby, że działało, nawet jeśli ciąg znaków zawiera znaki nowej linii.Python 3
Na przykład,
Jeśli długość łańcucha nie jest liczbą parzystą, druga linia będzie dłuższa. Na przykład
źródło