我想將一個字串分成兩半並按順序列印它們。例如:
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
蟒蛇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
如果字串長度不是偶數,則第二行會更長。例如
$ echo abcdefg | python3 -c 's = input(); x= len(s) // 2; print(s[:x], s[x:], sep="\n")'
abc
defg