Answers:
变量的前半部分将是:
${var:0:${#var}/2}
变量的后半部分将是:
${var:${#var}/2}
因此您可以使用:
printf '%s\n' "${var:0:${#var}/2}" "${var:${#var}/2}"
您还可以使用以下awk命令:
awk 'BEGIN{FS=""}{for(i=1;i<=NF/2;i++)printf $i}{printf "\n"}{for(i=NF/2+1;i<=NF;i++){printf $i}{printf "\n"}}'
$ echo abcdef | awk 'BEGIN{FS=""}{for(i=1;i<=NF/2;i++)printf $i}{printf "\n"}{for(i=NF/2+1;i<=NF;i++){printf $i}{printf "\n"}}'
abc
def
$((...))
; 替换的off
和len
部分${var:off:len}
已作为算术表达式求值。范例:foo=01234567; echo "${foo:0:${#foo}/2} ${foo:${#foo}/2}"
。这是有据可查的,在bash 中zsh
和ksh93
bash中都是一样的。
另一个awk
脚本可以是:
echo abcdef | awk '{print substr($0,1,length/2); print substr($0,length/2+1)}'
/
和/ERE/
运算符的语法含糊,并且不适用于mawk或busybox awk ,并且它()
是可选的特殊情况 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
,即使字符串包含换行符,也可以节省管道和额外的处理并使之正常工作。
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.
例如,
$ echo abcdef | python3 -c 's = input(); x = len(s) // 2; print(s[:x], s[x:], sep="\n")'
abc
def
如果字符串长度不是偶数,则第二行会更长。例如
$ echo abcdefg | python3 -c 's = input(); x= len(s) // 2; print(s[:x], s[x:], sep="\n")'
abc
defg