답변1
POSIX는 기존 동작을 인코딩하는 것을 선호하며 기존 동작이 만족스럽지 않을 때 널리 채택되지 않는 새로운 기능만 적용합니다. 요즘에는 데이터를 표시하기 위해 고정 너비 글꼴의 서식 없는 텍스트를 사용하는 데 대한 요구 사항이 많지 않으므로 column
요구 사항이 될 가능성은 거의 없습니다. BSD에서 파생된 BSD 와 달리 pr
System V 및 기타 역사적 유니스에는 존재하지 않으므로 상속이 없습니다.
다른 텍스트 유틸리티와 마찬가지로 적절한 작업량을 사용하여 awk로 표현할 수 있습니다. 이것은 최소한으로 테스트되었습니다 column -t
. 간단한 경우(단지 한 문자) awk의 옵션은 -F
s와 유사합니다.column
-s
#!/usr/bin/env awk
{
if (max_column < NF) max_column = NF;
for (i = 1; i <= NF; i++) {
if (width[i] < length($i)) width[i] = length($i);
data[NR, i] = $i;
}
}
END {
for (i = 1; i < max_column; i++) format[i] = sprintf("%%-%ds ", width[i]);
format[max_column] = "%s\n";
for (k = 1; k <= NR; k++) {
for (i = 1; i <= max_column; i++) printf format[i], data[k, i];
}
}
답변2
pr
많은 일을 했습니다 column
. 실제 명령줄을 지정하면 대체 명령줄을 사용할 수 있습니다.
namepr - 인쇄용 텍스트 파일 변환
요약[옵션]...[파일]...
인쇄를 위해 문서를 페이지나 열로 분할하는 방법을 설명합니다.
특정 경우에는 다음을 사용할 수 있습니다 awk
.
awk '{printf("%2s %30s %10s", $1, $2, $3);}' file.txt
너비 지정자 2, 30 및 10은 하드코딩되어 있으므로 입력한 값을 선택하거나 파일을 두 번 읽어야 합니다(한 번은 각 열의 최대 너비를 얻고 두 번째는 입력한 값)을 얻으려면 ).
답변3
column
내가 아는 한 POSIX 유틸리티 세트에는 직접적으로 동등한 것이 없습니다.
가능한 (저렴한) POSIX 솔루션은 다음과 같습니다.
$ tr -s ' ' '\n' <<"EOT" | pr -3 -a -t
1 SMALL 000a
2 VERY_VERY_VERY_VERY_LONG 000b
3 SMALL 000c
EOT
1 SMALL 000a
2 VERY_VERY_VERY_VERY_LON 000b
3 SMALL 000
복사/붙여넣기 후 샘플 데이터에는 공백으로 구분된 필드가 있습니다. 실제로 개별적으로 분리된 경우에는 TAB
를 사용할 수 있습니다 tr '\t' '\n'
.
물론 이는 모든 입력 행에 동일한 수의 필드가 있다고 가정합니다. 매우 명백한 단점은 열의 크기가 균일하여 눈에 띄게 열악해 보인다는 것입니다 column -t
.
또한 위의 예에 표시된 것처럼 pr
행에 고정 길이(기본값은 72자)를 사용하고 열 너비에 맞지 않는 필드를 자릅니다. 그런 다음 -w
페이지 너비( )를 적절한 값으로 명시적으로 설정해야 할 수도 있습니다 .