bash 출력을 bash 테이블로 변환하는 방법

bash 출력을 bash 테이블로 변환하는 방법

Bash에서 프로그램을 실행한 후의 출력은 다음과 같습니다(두 줄, :limiter, 네 개의 데이터 열).

#003:BMW:11:36

#004:Audi:2:35

이런 bash 테이블로 변환하고 싶습니다

숫자 자동차 ID 비용
#003 BMW 11 36
#004 아우디 2 35

이를 달성하기 위해 sed/awk를 사용할 수 있습니까? 내 데이터가 파일에 없습니다.

답변1

데이터 형식을 다음과 같이 지정한다고 가정해 보겠습니다.

| Number | Car  | ID | Cost |
| ------ | ---- | -- | ---- |
| #003   | BMW  | 11 |   36 |
| #004   | Audi |  2 |   35 |

명령은 csvlook다음에서 비롯됩니다.csvkit제목을 먼저 입력하시면 자동으로 완료됩니다.

파일을 편집하거나(또는 데이터 생성기 명령이 헤더를 내보내도록 하여) Number:Car:ID:Cost시작 부분에 줄을 추가하여 헤더를 삽입하거나 즉석에서 헤더 줄을 제공할 수 있습니다.

$ { echo Number:Car:ID:Cost; cat file; } | csvlook
| Number | Car  | ID | Cost |
| ------ | ---- | -- | ---- |
| #003   | BMW  | 11 |   36 |
| #004   | Audi |  2 |   35 |

csvlook명령은 데이터가 CSV 문서임을 감지하고 :필드 구분 기호로 사용하고(명시적으로 지정할 수도 있음 -d :) 형식이 지정된 테이블을 생성합니다.

cat file데이터를 출력으로 생성하는 모든 명령으로 대체될 수 있습니다 .

최종 출력 csvlook은 유효한 Markdown 코드이며, 이 웹사이트에서는 다음과 같이 렌더링됩니다.

숫자 자동차 ID 비용
#003 BMW 11 36
#004 아우디 2 35

:입력을 CSV로 처리하면 따옴표 문자가 포함된 필드를 지원할 수 있습니다 .

$ cat file
#003:BMW:11:36
#004:Audi:2:35
#005:Saab:99:"1:50"
$ { echo Number:Car:ID:Cost; cat file; } | csvlook
| Number | Car  | ID | Cost |
| ------ | ---- | -- | ---- |
| #003   | BMW  | 11 | 36   |
| #004   | Audi |  2 | 35   |
| #005   | Saab | 99 | 1:50 |

답변2

당신이 사용할 수있는:

process-generating-output | sed '1i Number:Car:ID:Cost\n' | column -s: -t

산출:

Number  Car   ID  Cost
#003    BMW   11  36
#004    Audi  2   35

sed 명령을 사용하여 1i프로세스 빌드 출력에 열이 있는 것처럼 콜론으로 구분하여 열 이름을 입력하는 행을 삽입합니다. 그런 다음 열 명령을 통해 모든 것을 파이프하여 잘 정렬합니다.

(열 이름을 삽입하는 더 나은 방법을 제공한 @Frédéric Loyer에게 감사드립니다!)

답변3

출력 스트림을 다음 줄로 파이프합니다.

| column -ts: -o$'\t' -N Number,Car,ID,Cost

아마도 -o$'\t'( ) 옵션을 생략해야 할 것 같습니다.--output-separator

관련 정보