文字列を半分に分けて順番に印刷したい。たとえば、
abcdef
入力する
abc
def
これを行う簡単な方法はありますか、それともいくつかの文字列処理が必要ですか?
答え1
変数の前半は次のとおりです。
${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
答え2
split
ここでは文字列とコマンドの置換を使用します。
var=abcdef
printf '%s\n' "$(split -n1/2 <<<$var)" "$(split -n2/2 <<<$var)"
答え3
別のawk
スクリプトは次のとおりです。
echo abcdef | awk '{print substr($0,1,length/2); print substr($0,length/2+1)}'
答え4
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.
例えば、
$ 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