Вы можете избавиться от $((...)); offи lenчасть ${var:off:len}замещения уже оценивается как арифметические выражения. Пример: foo=01234567; echo "${foo:0:${#foo}/2} ${foo:${#foo}/2}". Это задокументировано, и это то же самое, что zshи ksh93в bash.
Мосви
3
Примечание. Если длина строки нечетная, она все равно разделится на две части, но вторая будет длиннее символа.
Петер - Восстановить Монику
8
Используя split, здесь строки и подстановку команд:
Обратите внимание, что он не работает с mawk или busybox awk из-за синтаксической неоднозначности деления /и /ERE/оператора и особого случая ()необязательности для length(все же эти реализации не являются POSIX-совместимыми в этом случае). Использование length()или length($0)здесь, а lengthне поможет для тех. Вы также можете сделать awk 'BEGIN{half = int(length(ARGV[1]) / 2); print substr(ARGV[1], 1, half) ORS substr(ARGV[1], half+1)}' abcdefчто бы сохранить канал и дополнительный процесс и заставить его работать, даже если строка содержит символы новой строки.
Стефан
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.
Ответы:
Используя расширение параметров и арифметику оболочки :
Первая половина переменной будет:
Вторая половина переменной будет:
чтобы вы могли использовать:
Вы также можете использовать следующую команду awk:
источник
$((...))
;off
иlen
часть${var:off:len}
замещения уже оценивается как арифметические выражения. Пример:foo=01234567; echo "${foo:0:${#foo}/2} ${foo:${#foo}/2}"
. Это задокументировано, и это то же самое, чтоzsh
иksh93
в bash.Используя
split
, здесь строки и подстановку команд:источник
Другой
awk
скрипт может быть:источник
/
и/ERE/
оператора и особого случая()
необязательности дляlength
(все же эти реализации не являются POSIX-совместимыми в этом случае). Использованиеlength()
илиlength($0)
здесь, аlength
не поможет для тех. Вы также можете сделатьawk 'BEGIN{half = int(length(ARGV[1]) / 2); print substr(ARGV[1], 1, half) ORS substr(ARGV[1], half+1)}' abcdef
что бы сохранить канал и дополнительный процесс и заставить его работать, даже если строка содержит символы новой строки.Python 3
Например,
Если длина строки не является четным числом, вторая строка будет длиннее. Например
источник