다음과 같은 출력이 있습니다.
Person 49
Persons Boss 3
HR 21
CEO 93
System Administrator 2
을 사용하면 column -t
다음과 같은 출력이 생성됩니다.
Person 49
Persons Boss 3
HR 21
CEO 93
System Administrator 2
보시다시피 이것은 좋아 보이지 않습니다. 다음과 같은 출력이 필요합니다.
Person 49
Persons Boss 3
HR 21
CEO 93
System Administrator 2
이게 어떻게 생산되는지 아는 사람 있나요?
답변1
Tab예를 들어 열 구분 기호를 다음과 같이 변경하십시오 column
.
output | sed 's/\S\+\s*$/\t&/' | column -t -s $'\t'
답변2
다음은 필요한 열 너비를 동적으로 결정하는 awk의 솔루션입니다. 각 행에는 원하는 수의 필드가 포함될 수 있지만 최종 필드는 정수라고 가정합니다. 정수는 필요에 따라 오른쪽에 정렬되도록 형식이 지정됩니다.
형식.awk
#!/usr/bin/awk -f
# Format text and numbers into two columns
# Written by PM 2Ring 2015.04.16
#Gather data, line by line
{
#Split name from number
match($0, /^(.*) ([0-9]+)[[:space:]]*$/, a)
#printf "%d: %s -> [%s] [%s]\n", NR, $0, a[1], a[2]
#Store name & number into arrays
name[NR] = a[1]
num[NR] = a[2]
#Update field widths
namelen = length(a[1])
if (namelen > maxname)
maxname = namelen
numlen = length(a[2])
if (numlen > maxnum)
maxnum = numlen
}
#Print re-formatted data
END{
for(i=1; i<=NR; i++)
#Use printf's '*' modifier to specify field widths
printf "%-*s %*d\n", maxname, name[i], maxnum, num[i]
}
산출
Person 49
Persons Boss 3
HR 21
CEO 93
System Administrator 2
다음과 같이 스크립트를 호출할 수 있습니다.
$ awk -f format.awk data_filename
텍스트 데이터를 파이프로 연결할 수도 있습니다. 를 사용하여 실행 권한을 부여 하면 chmod
다른 명령처럼 실행할 수 있습니다.
분명히 이것은 Costa의 솔루션보다 낫습니다( sed
전처리 용 column
). 따라서 다음과 같은 경우가 아니면 사용하는 것이 좋습니다.진짜숫자를 오른쪽으로 정렬하고 싶습니다. :) OTOH, 이 스크립트는것 같다Costa의 한 줄짜리 솔루션보다 더 크고 매우 빠르기 때문에 awk
데이터 파일이 매우 크더라도 이 솔루션의 속도는 Costa의 솔루션과 비슷할 것으로 기대됩니다.
답변3
마지막으로 보관된 변수를 새 변수에 저장한 다음 해당 원시 포인터를 빈 문자열로 설정하고 $0과 저장한 마지막 보관된 변수를 인쇄하면 한 줄에서 이 작업을 수행할 수 있습니다.
(echo a b c 10; echo x y 2 ; echo x 1) \
| awk '{lastf=$NF ; $NF="" ; print $0,", "lastf}' \
| column -ts,
# output
a b c 10
x y 2
x 1