문자열을 반으로 나누어 순서대로 인쇄하고 싶습니다. 예를 들어:
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