回答:
変数の前半は次のようになります。
${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
$((...))
。部分置換は、すでに算術式として評価されています。例:。それは文書化されており、bash と同じです。off
len
${var:off:len}
foo=01234567; echo "${foo:0:${#foo}/2} ${foo:${#foo}/2}"
zsh
ksh93
別の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
文字列の長さが偶数でない場合、2行目は長くなります。例えば
$ echo abcdefg | python3 -c 's = input(); x= len(s) // 2; print(s[:x], s[x:], sep="\n")'
abc
defg