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

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

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

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


답변

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)이됩니다.


답변

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

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

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

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


답변

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

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

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

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

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

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


답변

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

cat myfile | column -s \t