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