공백을 사용하지 않고 탭을 구분하기 위해 열을 어떻게 사용할 수 있습니까?


58

column텍스트를 형식화 하기 위해 Unix 명령 을 사용하고 싶습니다 . 탭으로 구분 된 필드가 있지만 각 필드 내에 공백도 있습니다. column공백 (탭과 공백)을 구분합니다. 열을 탭으로 구분 기호로 사용하려면 어떻게해야합니까?

다음을 사용하여 탭을 구분 기호로 지정하려고했습니다.

cat myfile | column -t -s"\t"

답변:


81
column -t -s '\t'

에 열을 분리 할 \t문자를.

column -s \tcolumn -s t백 슬래시는 쉘에서 인용 연산자로 해석되므로 .와 동일 합니다.

여기서 실제 TAB 문자를 열에 전달하려고합니다. ksh93, zsh, bash, mksh, busybox sh 또는 FreeBSD sh를 사용하는 경우 :

column -ts $'\t'

또는 Ctrl-V Tab쉘 프롬프트에서 따옴표로 입력하거나 (공백과 같이 셸 구문에서 탭 문자가 토큰 구분 기호이므로 백 슬래시가 앞에 옴) 실제 탭 문자를 입력 하거나 "$(printf '\t')", split + glob를 비활성화하는 데 큰 따옴표가 필요합니다. 탭 문자로서의 연산자도 기본값 인 $IFS)이됩니다.


3
내가해야 할 일을했을 column -t -s $'\t'배쉬이 생각하는 것처럼 보였던 것에 '\t'모두 의미 \ 하고 t있지만, $'\t'리터럴 탭을 의미한다. 강타 악취
ThorSummoner

POSIX 호환 (주님이 저를 도와주세요)이 필요한 경우,이 환상적인 답변에 크게 근거한 제 답변을 참조하십시오!
Nick Bull

이 솔루션은 나를 위해 일했습니다- $'\t'탭을 구분자로 만듭니다. 그러나 awk -F "\t"탭을 awk의 구분 기호로 사용한다고 확신 합니다. 열이 아닌 왜 작동합니까?
Mike

3

나는 다음을 사용했다 (텍스트에 포함되지 않은 경우에만 작동 |) :

cat myfile | tr '\t' '|' | column -t -s '|'

이것은 탭을 파이프로 바꾸고 파이프가있는 열을 구분 기호로 사용합니다.

(Stéphane의 답변에서 생선 껍질에서 즉시 작동하는 것을 보지 못했기 때문에이 작업을 수행했습니다. 그렇지 않으면 Stéphane의 답변이 좋습니다.)


3

POSIX의 경우 $'...'ANSI-C 이스케이프라고하는을 정의하지 않았습니다.

대신 다음을 사용할 수 있습니다 $(printf '\t').

column -t -s "$(printf '\t')"

$(printf '\011')011(십진수 9의 8 진 표현)은 가로 탭 문자의 ANSI 코드이므로 사용할 수 있습니다 .

column -t -s "$(printf '\011')"

그러나 쉘 버전에서 이것이 일관성이없는 이유에 대해서는 Stéphane Chazelas의 아래 주석을 참조하십시오.


2
POSIX는 TAB의 인코딩을 지정하지 않습니다. C 로케일 인코딩이 EBCDIC 기반 인 POSIX 시스템은 여전히 ​​ASCII와 같이 TAB이 5가 아닌 9입니다. 가능하면 "$(printf '\t')"내 답변에 표시된 것과 같은 종류의 문제를 피하기 위해 이름으로 문자를 참조하는 것이 좋습니다 . 참고이 $'...'는 POSIX 사양의 다음 주요 버전에 포함될 예정입니다.
Stéphane Chazelas

@ StéphaneChazelas는 $(printf '\t')POSIX입니까? 감사합니다!
Nick Bull


@ StéphaneChazelas 대단히 감사합니다, 나는 당신의 매우 유용한 팁을 포함하여 내 대답을 업데이트했습니다 :)
Nick Bull

2

-t당신이 원하는 열 수를 선택하는 것입니다. 이 항목을 비워도 아무런 변화가 없습니다. 또한 공백을 원 -s하므로 이것을 시도하십시오.

cat myfile | column -s \t


감사. 이것은 내가 찾고있는 것에 가깝습니다. 그러나 이제 모든 줄이 한 줄로 병합되었습니다. 각 회선을 자체 회선으로 유지하려면 어떻게해야합니까?
turtle

기본적으로 column열 앞에 행을 채 웁니다. 당신은에 관심이있을 것이다pr
lurker
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.