오래 전에 입력 내용을 형식이 좋은 테이블에 입력하는 명령을 사용했던 기억이 납니다.
예를 들어, 이 입력의 경우
apple 1 100
orange 20 19
pineapple 1000 87
avocado 4 30
출력은 다음과 유사합니다.
apple 1 100
orange 20 19
pineapple 1000 87
avocado 4 30
이 도구의 이름을 알고 싶습니다.
답변1
답변2
awk
stdin 처리 솔루션
column
POSIX가 아니기 때문에 아마도 다음과 같습니다.
mycolumn() (
file="${1:--}"
if [ "$file" = - ]; then
file="$(mktemp)"
cat >"${file}"
fi
awk '
FNR == 1 { if (NR == FNR) next }
NR == FNR {
for (i = 1; i <= NF; i++) {
l = length($i)
if (w[i] < l)
w[i] = l
}
next
}
{
for (i = 1; i <= NF; i++)
printf "%*s", w[i] + (i > 1 ? 1 : 0), $i
print ""
}
' "$file" "$file"
if [ "$file" = - ]; then
rm "$file"
fi
)
시험:
printf '12 1234 1
12345678 1 123
1234 123456 123456
' > file
테스트 명령:
mycolumn file
mycolumn <file
mycolumn - <file
모든 사람을 위한 출력:
12 1234 1
12345678 1 123
1234 123456 123456
또한보십시오:
답변3
상대적으로 작은 파일(바이트 길이가 getconf ARG_MAX
)보다 작고 입력 크기가 어느 정도 알려져 있는 경우(과일 이름이 18자보다 길지 않다고 가정) 에 printf
유용할 수 있습니다 . bash
예는 다음과 같습니다.
printf '%-20s %5s %5s\n' $(<file.txt)
산출:
apple 1 100
orange 20 19
pineapple 1000 87
avocado 4 30
숫자가 어떻게 생겼는지 확인하세요.옳은합리적이고 근거가 충분합니다.