"열"이 출력에서 ​​열 구분 기호로 단일 공백을 사용하도록 만듭니다.

"열"이 출력에서 ​​열 구분 기호로 단일 공백을 사용하도록 만듭니다.
$ echo 'a b' | column -t 
a  b

출력에서 a와 사이에는 2개의 공백이 있습니다 . 가능하다면 분리를 위해 한 공간만 b어떻게 사용할 수 있나요 ?column

편집 2: 더 많은 사례를 포함하도록 데이터 변경

$ cat data 
1 2 b
20 12.5 something
300 12.8 as
600 16 asrgty
1200 4.9 srty
1800 33.5 sry
10000 1.5 sty
200000 1.5 sty
$ column -t < data
1       2     b
20      12.5  something
300     12.8  as
600     16    asrgty
1200    4.9   srty
1800    33.5  sry
10000   1.5   sty
200000  1.5   sty
$  column -t -s '' < data
1 2 b
20 12.5 something
300 12.8 as
600 16 asrgty
1200 4.9 srty
1800 33.5 sry
10000 1.5 sty
200000 1.5 sty
$ column -t -s ' ' < data
1       2     b
20      12.5  something
300     12.8  as
600     16    asrgty
1200    4.9   srty
1800    33.5  sry
10000   1.5   sty
200000  1.5   sty
$ column -t < data | sed -re 's/  / /g'
1    2   b
20   12.5 something
300   12.8 as
600   16  asrgty
1200  4.9  srty
1800  33.5 sry
10000  1.5  sty
200000 1.5  sty
$ column -t < data | sed -re 's/  / /'
1      2     b
20     12.5  something
300    12.8  as
600    16    asrgty
1200   4.9   srty
1800   33.5  sry
10000  1.5   sty
200000 1.5   sty

예상되는

1      2    b
20     12.5 something
300    12.8 as
600    16   asrgty
1200   4.9  srty
1800   33.5 sry
10000  1.5  sty
200000 1.5  sty

sed참고: 이 특정 상황에 적용되는 팁을 제공하지 마십시오 . SE에 대한 질문은 매우 구체적인 데이터 형식뿐만 아니라 다른 사람들에게도 유용해야 합니다.

답변1

다듬을 수 있어요마지막 공백 문자만존재하다일련의 공백 문자;이와 같이:

sed 's/\( *\) /\1/g'

항상 연속으로 두 개 이상의 공백 문자가 있으므로 원하는 대로 분할이 항상 잘립니다.

입력하다:

column -t -s\ <<\COLS | sed 's/\( *\) /\1/g'
0 3.1415926535 s
00 3.141592653 so
000 3.14159265 som
0000 3.1415926 some
00000 3.141592 somet
000000 3.14159 someth
0000000 3.1415 somethi
00000000 3.141 somethin
000000000 3.14 something
COLS

산출:

0         3.1415926535 s
00        3.141592653  so
000       3.14159265   som
0000      3.1415926    some
00000     3.141592     somet
000000    3.14159      someth
0000000   3.1415       somethi
00000000  3.141        somethin
000000000 3.14         something

이 규칙이 어떻게 준수되는지 실제로 보여주기 위해 sed열의 끝에서 끝까지 여러 복사본을 만들 수 있으며 각 복사본은 공간 오프셋을 얻습니다.

입력하다:

column -t <input | sed 's/.*/&  &   &/;s/\( *\) /\1/g'

산출:

0         3.1415926535 s 0         3.1415926535 s  0         3.1415926535 s
00        3.141592653  so 00        3.141592653  so  00        3.141592653  so
000       3.14159265   som 000       3.14159265   som  000       3.14159265   som
0000      3.1415926    some 0000      3.1415926    some  0000      3.1415926    some
00000     3.141592     somet 00000     3.141592     somet  00000     3.141592     somet
000000    3.14159      someth 000000    3.14159      someth  000000    3.14159      someth
0000000   3.1415       somethi 0000000   3.1415       somethi  0000000   3.1415       somethi
00000000  3.141        somethin 00000000  3.141        somethin  00000000  3.141        somethin
000000000 3.14         something 000000000 3.14         something  000000000 3.14         something

답변2

다음 방법을 시도해 보세요.

$ echo 'a b' | column -t -s ''
a b

열 매뉴얼 페이지에서:

  • -t입력에 포함된 열 수를 확인하고 테이블을 만듭니다. 기본적으로 열은 -s 옵션과 함께 제공되는 공백이나 문자로 구분됩니다. 예쁜 인쇄 디스플레이에 유용합니다.
  • -s-t 옵션의 열을 구분하는 데 사용되는 문자 집합을 지정합니다.

빌드가 완료되면 다음 명령이 작동합니다.

$ cat data | column -t | sed -r 's:  : :'
300  12.8
600  16.9
900  19.2
1200 24.9
1500 29.7
1800 33.5

마지막으로 업데이트된 명령(죄송하지만 명령이므로 sed실행을 사용하는 방법은 없습니다 column):

$ cat data | column -t | sed -r 's: ( [a-z,0-9]):\1:g'
1      2    b
20     12.5 something
300    12.8 as
600    16   asrgty
1200   4.9  srty
1800   33.5 sry
10000  1.5  sty
200000 1.5  sty

답변3

주소 지정사용자 80551의 댓글이 질문에서:

@don_crissticolumn: invalid option -- 'o'

아마도don_crissti의 댓글예시가 잘렸네요...

기본 출력 구분 기호는 공백 두 개이므로 다음을 실행할 수 있습니다.

echo 'a b' | column -t -o ' '

이것은 작동합니다:

echo 'a b' | column -t -o " "

예 2:

column -t -o " " < data

관련 정보