$ 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_crissti
column: invalid option -- 'o'
아마도don_crissti의 댓글예시가 잘렸네요...
기본 출력 구분 기호는 공백 두 개이므로 다음을 실행할 수 있습니다.
echo 'a b' | column -t -o ' '
이것은 작동합니다:
echo 'a b' | column -t -o " "
예 2:
column -t -o " " < data