蟒蛇3

蟒蛇3

我想将一个字符串分成两半并按顺序打印它们。例如:

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

相关内容