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