탭으로 구분된 파일의 열을 어떻게 멋지게 표시할 수 있나요?

탭으로 구분된 파일의 열을 어떻게 멋지게 표시할 수 있나요?

테이블 항목의 길이가 다양하기 때문에 읽기가 매우 어려운 헤더가 포함된 탭으로 구분된 파일이 있습니다. 본질적으로 약간 비슷해 보입니다.

c1    c2    c3    c4
A    0    1.0231321321213    92
BBBBB    12321.00002131    19912132.    0
CC    0.0999813221321    0    0

열 간격을 더 넓게 만들고 열을 읽을 수 있는 열과 잘 정렬하여 더 읽기 쉽게 만드는 방법이 있습니까?

c1       c2                 c3                 c4
A        0                  1.0231321321213    92
BBBBB    12321.00002131     19912132.          0
CC       0.0999813221321    0                  0

답변1

입력 열이 단순 공백(ASCII 공백 0x20 및/또는 탭 0x09)으로 구분되고 빈 열이 없는 경우 다음과 같이 간단합니다.

<infile column -t
c1     c2               c3               c4
ABC    0                1.0231321321213  92
BBBBB  12321.00002131   19912132.        0
CC     0.0999813221321  0                0

그러나 column캐리지 리턴(ASCII 0x0d 또는 \r), 폼 피드(ASCII 0x0c 또는 \f) 또는 세로 탭(ASCII 0x0b 또는 \v)은 구분 기호로 처리되지 않습니다.
열이 일부 "공백"( [[:space:]][ \t\r\f\v]: 공백, 가로 탭, 캐리지 리턴, 피드 또는 세로 탭(줄 바꿈 아님))으로 구분될 수 있는 경우 모든 공백을 하나의 구분 기호( 기본값은 공백입니다). 개행 문자를 행 구분 기호와 열 구분 기호로 모두 사용할 수는 없습니다.

개행 문자를 제외하면 다음과 같이 작동합니다.

<infile sed 's/[[:space:]]\+/ /g' | column -t

[…]공백 구분 기호는 범위 내에서 줄일 수 있습니다 .

소스 파일의 열이 단일 문자(예: 탭 문자)로 구분된 경우 쉘 ANSI C 확장자( $'…')(실행 중인 쉘에 해당 기능이 있는 경우)를 사용하여 구분 기호로 사용되는 문자를 선언할 수 있습니다.
그런 다음 다음을 사용하십시오 column.

<infile column -s $'\t' -t

열의 출력 구분 기호는 항상 공백입니다.

여러 연속 구분 기호를 허용해야 하는 경우(빈 열이 있는 경우 유용함) (GNU) 옵션을 사용하여 -n여러 입력 인접 구분 기호를 단일 구분 기호로 병합하는 것을 비활성화할 수 있습니다.

<infile column -s $'\t' -tn

소스 파일이 단일 문자가 아닌 여러 문자로 구분된 경우 공백이나 탭과 같은 단일 문자로 변환하는 $'...'추가 사용 없이 이러한 문자를 정의할 수 있습니다.sed

<infile column -s $'\t ' -tn

관련 정보