열 너비가 입력에서 가장 긴 줄이 되도록 텍스트를 중앙에 정렬하고 양쪽에 패딩을 정렬하는 쉬운 방법이 있습니까?
예를 들면 다음과 같습니다.
aaa
bbbb
c
ddddd
ee
다음과 같습니다(점은 공백을 나타냄).
.aaa.
bbbb.
..c..
ddddd
.ee..
어떤 도구라도 가능합니다. sed
그것 awk
또는 많은 coreutils
도구 중 하나입니다.
편집하다: 출력 결과를 오해하신 분들도 계신 것 같습니다. 출력이 채워집니다.공간, 포인트가 아닙니다. 여기서는 더 명확하게 하기 위해 점을 사용하고 있습니다.
답변1
vim을 사용할 수 있습니다. 일반 모드에서:
:%center 5
...파일의 각 줄에 대해 작동하며(이 경우 의미 %
) 최대 5자까지 묶습니다(vim 문서에서는 열이라고 함). 이것은 당신이 설명하는 것과 정확히 일치합니다. 파일에서 가장 긴 줄을 얻으려면(center 명령의 경우) wc -L file.txt
vim에서 ;
:! wc -L %
불행히도 이것은 바닐라 vi에서는 사용할 수 없지만 "linux"라는 태그가 지정되어 있으므로 저장소에 최소한 vim이 있을 것입니다.
한 줄로 이 작업을 수행할 수도 있습니다.
vim file.txt -c '%center 5' -c 'wq' &> /dev/null
...하지만 그것이 작업을 수행하는 가장 빠른 방법은 아니라고 확신합니다.
답변2
awk를 사용하여 이를 수행하는 한 가지 방법은 다음과 같습니다(pad.awk):
# Determine length of longest line
FNR == NR { if(length > M) M = length; next }
# Pad each line according current line length (L) and longest line (M)
{
L = M - length;
for(i=1; i<=int(L/2); i++)
printf "."
printf "%s", $0
for(i=1; i<=int(L/2+.5); i++)
printf "."
printf "\n"
}
다음과 같이 실행하세요:
awk -f pad.awk infile infile
산출:
.aaa.
bbbb.
..c..
ddddd
.ee..
GNU wc를 사용할 수 있는 경우 wc -L
. 즉, 첫 번째 줄을 삭제합니다.pad.awk다음과 같이 awk를 실행하세요.
awk -f pad.awk M=$(wc -L < infile) infile
###고쳐 쓰다
공백으로 문자열을 채우는 부분을 놓쳤습니다. 그럼에도 불구하고 가변 패딩 문자를 허용하는 것은 매우 간단합니다. 위의 아이디어를 기반으로 한 완전한 예는 다음과 같습니다.
# Set padding character to the default (" ") if it was not set with -v
# Set ORS to "" to make printing easier
BEGIN { if(D == "") D = " "; ORS = "" }
# Pad each line according current line length (L) and longest line (M)
{
L = M - length;
for(i=1; i<=int(L/2); i++)
print D
print $0
for(i=1; i<=int(L/2+.5); i++)
print D
print "\n"
}
예:
awk -v M=$(wc -L < infile) -v D=_ -f pad.awk infile
산출:
_aaa_
bbbb_
__c__
ddddd
_ee__
답변3
이것이 내 솔루션입니다.Thor의 답변에 대한 의견:
awk -v M="`wc -L file`" '{ printf "%*s%*s", (M+length)/2, $0, (M-length+1)/2+1, "\n" }' < file
문제가 우아하고 간결하게 해결된 것 같아서 답변으로 다시 게시합니다.
답변4
Python 사용:
#!/usr/bin/env python
with open('input.txt') as file:
for line in file:
l = line.strip()
print l.center(5,'.'),"\n",
참고: 2.7보다 이전 버전의 Python을 사용하는 경우에는 작동하지 않습니다.
동일한 출력:
rahul@home-pc:~/work$ python format_center.py
.aaa.
.bbbb
..c..
ddddd
..ee.