column
텍스트를 형식화 하기 위해 Unix 명령 을 사용하고 싶습니다 . 탭으로 구분 된 필드가 있지만 각 필드 내에 공백도 있습니다. column
공백 (탭과 공백)을 구분합니다. 열을 탭으로 구분 기호로 사용하려면 어떻게해야합니까?
다음을 사용하여 탭을 구분 기호로 지정하려고했습니다.
cat myfile | column -t -s"\t"
답변
column -t -s '\t'
에 열을 분리 할 \
및 t
문자를.
column -s \t
column -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