길이가 7보다 큰 경우 awk를 사용하여 한 줄을 두 줄로 나누는 방법은 무엇입니까? [폐쇄]

길이가 7보다 큰 경우 awk를 사용하여 한 줄을 두 줄로 나누는 방법은 무엇입니까? [폐쇄]

예를 들어, 명령줄에서 이와 같은 내용을 인쇄하고 싶습니다. file.txt라는 파일이 있다고 가정해 보겠습니다.

 What is life?
 how are you?
 hi
 whatup
 this is more than

awk를 사용하여 명령줄에서 인쇄하고 싶지만 문자 수가 7보다 크면 출력은 다음과 같아야 합니다.

 What is 
 life?
 how are 
 you?
 hi
 whatup
 this is
 more than

따라서 기본적으로 awk를 사용할 때 문자 수가 7보다 크면 출력에서 ​​줄을 두 줄로 나눕니다.

답변1

다음 위치에서 이 작업을 수행할 수 있습니다 awk.

$ awk '{sub(/.{8}/,"&\n"); print}' file
What is
life?
how are
you?
hi
whatup
this is
more than

실제로 작업에 가장 적합한 도구는 아닙니다. 더 간단하게 동일한 작업을 수행할 수 있습니다.

$ fold -sw 8 file
What is 
life?
how are 
you?
hi
whatup
this is 
more 
than

Perl을 사용할 수도 있습니다.

$ perl -pe 's/.{8}/$&\n/' file
What is 
life?
how are 
you?
hi
whatup
this is 
more than

답변2

다른 답변에 제공된 것처럼 사용할 수 있지만 awk다음을 사용할 수도 있습니다.fmt

fmt -s -w8 file
What is
life?
how are
you?
hi
whatup
this
is more
than

답변3

그리고

awk 'length < 7 { print ; next ; } 
         { printf "%s\n%s\n",substr($0,0,7),substr($0,8) }' file.txt

밝혀지다

What is
 life?
how are
 you?
hi
whatup
this is
 more than

흰색 문자 사용 건너뛰기

awk 'length < 7 { print ; next ; } 
    { printf "%s\n",substr($0,0,7) ; 
      i=8 ; while (substr($0,i,1) == " " ) i++; printf "%s\n",substr($0,i) }'

답변4

원하는 출력을 얻으려면 다음을 수행하십시오 sed.

$ sed -e 's/.\{7\} /&\
/' <file
What is 
life?
how are 
you?
hi
whatup
this is 
more than

이는 입력의 8번째 문자가 항상 공백이기 때문에 작동합니다.

8번째 문자에 관계없이 7번째 문자에서 중단하려면 다음을 수행하십시오.

$ sed -e 's/./\
&/8' <file

관련 정보