Gabriel Diego Asked: 2019-05-31 13:11:21 +0800 CST2019-05-31 13:11:21 +0800 CST 2019-05-31 13:11:21 +0800 CST Como dividir uma string em duas substrings de mesmo comprimento usando o bash? 772 Eu gostaria de dividir uma string em duas metades e imprimi-las sequencialmente. Por exemplo: abcdef em abc def Existe uma maneira simples de fazer isso ou precisa de algum processamento de string? bash string 4 respostas Voted Best Answer jesse_b 2019-05-31T13:18:59+08:002019-05-31T13:18:59+08:00 Usando expansão de parâmetros e aritmética de shell : A primeira metade da variável será: ${var:0:${#var}/2} A segunda metade da variável será: ${var:${#var}/2} então você poderia usar: printf '%s\n' "${var:0:${#var}/2}" "${var:${#var}/2}" Você também pode usar o seguinte comando 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 Freddy 2019-05-31T13:42:29+08:002019-05-31T13:42:29+08:00 Usando split, aqui strings e substituição de comandos: var=abcdef printf '%s\n' "$(split -n1/2 <<<$var)" "$(split -n2/2 <<<$var)" Dudi Boy 2019-05-31T13:37:02+08:002019-05-31T13:37:02+08:00 Outro awkscript pode ser: echo abcdef | awk '{print substr($0,1,length/2); print substr($0,length/2+1)}' wjandrea 2019-06-01T06:02:39+08:002019-06-01T06:02:39+08:00 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. Por exemplo, $ echo abcdef | python3 -c 's = input(); x = len(s) // 2; print(s[:x], s[x:], sep="\n")' abc def Se o comprimento da string não for um número par, a segunda linha será mais longa. Por exemplo $ echo abcdefg | python3 -c 's = input(); x= len(s) // 2; print(s[:x], s[x:], sep="\n")' abc defg
Usando expansão de parâmetros e aritmética de shell :
A primeira metade da variável será:
A segunda metade da variável será:
então você poderia usar:
Você também pode usar o seguinte comando awk:
Usando
split
, aqui strings e substituição de comandos:Outro
awk
script pode ser:Python 3
Por exemplo,
Se o comprimento da string não for um número par, a segunda linha será mais longa. Por exemplo