연속된 구분 기호가 포함된 빈 열이 있는 테이블 인쇄

연속된 구분 기호가 포함된 빈 열이 있는 테이블 인쇄

column입력을 테이블로 변환하는 데 일반적으로 사용하는 것은 다음 과 같습니다.

$ echo 'a\tb\tc\nd\te\tf' | column -t -s $'\t'
a  b  c
d  e  f

그러나 다음과 같이 빈 열을 축소합니다.

$ echo 'a\tb\tc\nd\t\tf' | column -t -s $'\t'
a  b  c
d  f

연속된 구분 기호가 있는 경우 빈 열을 인쇄하는 대신. 이것이 내가 원하는 것입니다. 사용하거나 column다른 방법으로:

a  b  c
d     f

답변1

다음을 사용하는 경우 GNU column:

-N
기본적으로 -t 옵션을 사용할 때 열 명령은 여러 개의 인접한 구분 기호를 단일 구분 기호로 병합합니다. 이 옵션은 이 동작을 비활성화합니다. 이 옵션은 Debian GNU/Linux 확장입니다.

printf 'a\tb\tc\nd\t\tf\n'  | column -t -n -s $'\t'

산출:

a  b  c
d     f

사용할 수 없는 경우 sed를 사용하여 탭 사이에 GNU column공백(또는 a와 같은 다른 항목)을 추가할 수 있습니다.-

printf 'a\tb\tc\nd\t\tf\n'  | sed -e ':loop; s/\t\t/\t-\t/; t loop' | column -t -s $'\t'

답변2

내 버전의 열 명령에서 -n 옵션을 찾을 수 없으므로 sed를 사용하여 문제를 해결했습니다.

echo -e 'a\tb\tc\nd\t\tf' | sed 's/\t\t/\t \t/'| column -t -s $'\t'

답변3

GNU 열이 없는 사용자(예: MacOS): 첫 번째 열과 마지막 열을 기록해 두십시오.첫 번째 열이 가장 길지 않은 경우, 변화가 있을 것입니다. 스크립트의 루프는 필요하지 않은 것 같습니다. 다음 파이프라인을 사용하는 것이 좋습니다.| sed $'s/^\t/-\t/;s/\t\t/\t-\t/g;s/\t$/\t-/' | column -t

paste \
<(printf "a\nb\nc") \
<(printf "1\n2\n3\n4444\n5\n6") \
<(printf "d\ne\nf\ng\nh\ni\nj\nijkl\nk\nl") \
<(printf "X") \
\
| sed $'s/^\t/-\t/;s/\t\t/\t-\t/g;s/\t$/\t-/' | column -t
a  1     d     X
b  2     e     -
c  3     f     -
-  4444  g     -
-  5     h     -
-  6     i     -
-  -     j     -
-  -     ijkl  -
-  -     k     -
-  -     l     -

관련 정보