탭으로 구분 된 값을 ASCII 테이블로 변환


8

다음과 같이 탭으로 구분 된 데이터를 변환하는 가장 효율적인 방법은 무엇입니까?

a   b   c   d   cat
NULL    NULL    NULL    NULL    NULL
NULL    NULL    NULL    d   d
NULL    NULL    c   NULL    c
NULL    NULL    c   d   c; d
NULL    b   NULL    NULL    b
NULL    b   NULL    d   b; d
NULL    b   c   NULL    b; c
NULL    b   c   d   b; c; d
a   NULL    NULL    NULL    a
a   NULL    NULL    d   a; d
a   NULL    c   NULL    a; c
a   NULL    c   d   a; c; d
a   b   NULL    NULL    a; b
a   b   NULL    d   a; b; d
a   b   c   NULL    a; b; c
a   b   c   d   a; b; c; d

이것에 가까운 것 :

a    | b    | c    | d    | cat
-----+------+------+------+-----------
NULL | NULL | NULL | NULL | NULL
NULL | NULL | NULL | d    | d
NULL | NULL | c    | NULL | c
NULL | NULL | c    | d    | c; d
NULL | b    | NULL | NULL | b
NULL | b    | NULL | d    | b; d
NULL | b    | c    | NULL | b; c
NULL | b    | c    | d    | b; c; d
a    | NULL | NULL | NULL | a
a    | NULL | NULL | d    | a; d
a    | NULL | c    | NULL | a; c
a    | NULL | c    | d    | a; c; d
a    | b    | NULL | NULL | a; b
a    | b    | NULL | d    | a; b; d
a    | b    | c    | NULL | a; b; c
a    | b    | c    | d    | a; b; c; d

현재 다음과 같이 메모장 ++을 사용합니다.

  1. 탭을 공백으로 변환
  2. 수동으로 데이터 정렬
  3. 열 모드를 사용하여 파이프 삽입

두 번째 단계는 가장 지루한 단계이며 적어도이 부분은 자동화되어 있습니다.

참고 : 작업 할 때 브라우저를 사용하고 때로는 텍스트 편집기가 함께 열려 있습니다. 효율적인 솔루션은 최소한의 노력이 필요합니다. 나는 사용할 수 있습니다 :

  • 메모장 ++
  • 정규식 찾기 / 바꾸기 지원 일반 텍스트 편집기
  • 브라우저 콘솔에 입력 된 JavaScript
  • 온라인 웹 서비스
  • 명령 행의 PHP ( php -a)

4
어떤 환경에 있습니까? 어떤 도구를 사용할 수 있습니까? 그 중 어느 것에 익숙하십니까? 어느 쪽을 사용하겠습니까? 이 질문의 목적을 위해 "효율"을 어떻게 정의합니까? 일을하고 싶은 사람들이있는 것처럼 일을하는 방법은 거의 많을 것입니다. 추가 정보를 제공해야합니다. 좋은 질문을하는 방법을 참조하십시오 .
Jeff Zeitlin

@JeffZeitlin 질문을 업데이트하겠습니다.
Salman A

간단한 awk스크립트입니다.
Barmar

@Barmar 나는 awk를 사용하지 않지만 다른 사람이 유용하다고 확신합니다.
살만 A

그것에 대해 PCG 에게 질문하십시오 – lulz는 계속 될 것입니다. 대기, 그것은 이미 요청을받은 것 ... codegolf.stackexchange.com/questions/100613/... (TSV-이> CSV는 ... 단 하나의 문자 차이고 {{(⊃⍵)⍪⍉⍪↑¨↓⍉↑1↓⍵}s¨'⎕T'⎕T¨(s←1↓¨⊢⊂⍨⊢=⊃)¯1⌽⍵}어, 작업 할 좋은만큼 보인다?)

답변:


9

탭으로 구분 된 값을 ASCII 테이블로 변환하려면 어떻게해야합니까?

이런 종류의 작업 에는 텍스트 테이블 생성기 를 사용 합니다.

해당 페이지에 데이터를 붙여 넣고 다음 표를 만들었습니다.

+------+------+------+------+------------+
| a    | b    | c    | d    | cat        |
+------+------+------+------+------------+
| NULL | NULL | NULL | NULL | NULL       |
+------+------+------+------+------------+
| NULL | NULL | NULL | d    | d          |
+------+------+------+------+------------+
| NULL | NULL | c    | NULL | c          |
+------+------+------+------+------------+
| NULL | NULL | c    | d    | c; d       |
+------+------+------+------+------------+
| NULL | b    | NULL | NULL | b          |
+------+------+------+------+------------+
| NULL | b    | NULL | d    | b; d       |
+------+------+------+------+------------+
| NULL | b    | c    | NULL | b; c       |
+------+------+------+------+------------+
| NULL | b    | c    | d    | b; c; d    |
+------+------+------+------+------------+
| a    | NULL | NULL | NULL | a          |
+------+------+------+------+------------+
| a    | NULL | NULL | d    | a; d       |
+------+------+------+------+------------+
| a    | NULL | c    | NULL | a; c       |
+------+------+------+------+------------+
| a    | NULL | c    | d    | a; c; d    |
+------+------+------+------+------------+
| a    | b    | NULL | NULL | a; b       |
+------+------+------+------+------------+
| a    | b    | NULL | d    | a; b; d    |
+------+------+------+------+------------+
| a    | b    | c    | NULL | a; b; c    |
+------+------+------+------+------------+
| a    | b    | c    | d    | a; b; c; d |
+------+------+------+------+------------+

그런 다음이 출력 (생성자가 대부분의 작업을 수행함)을 복사하고 notepad ++에 붙여 넣고 적절하게 정리할 수 있습니다.


5

명령 행 솔루션이 필요한 경우 pandocpandoc-placetable 필터 와 함께 사용할 수도 있습니다 .

테이블을 배치 foo.txt하고 다음을 실행하십시오.

pandoc-placetable --file=foo.txt --delimiter="\t" --header | pandoc -f json -t markdown-simple_tables-multiline_tables -o output.md

다음과 같은 결과가 발생합니다 output.md.

| a    | b    | c    | d    | cat        |
|------|------|------|------|------------|
| NULL | NULL | NULL | NULL | NULL       |
| NULL | NULL | NULL | d    | d          |
| NULL | NULL | c    | NULL | c          |
| NULL | NULL | c    | d    | c; d       |
| NULL | b    | NULL | NULL | b          |
| NULL | b    | NULL | d    | b; d       |
| NULL | b    | c    | NULL | b; c       |
| NULL | b    | c    | d    | b; c; d    |
| a    | NULL | NULL | NULL | a          |
| a    | NULL | NULL | d    | a; d       |
| a    | NULL | c    | NULL | a; c       |
| a    | NULL | c    | d    | a; c; d    |
| a    | b    | NULL | NULL | a; b       |
| a    | b    | NULL | d    | a; b; d    |
| a    | b    | c    | NULL | a; b; c    |
| a    | b    | c    | d    | a; b; c; d |

STDIN에서 읽으려면 --file인수를 생략하십시오 . STDOUT으로 인쇄하려면 -o인수를 생략하십시오 .


3

ruslan의 유닉스 / 리눅스 column명령 사용에 대한 아이디어 는 좋은 것이지만, 답변에 제공된 명령 줄이 제대로 작동하지 않습니다. 우선 , 명령 행에서 탭으로 column인식 \t(또는 \\t) 하지 않습니다 . 가지고 있다면 할 bash수 있습니다

column -t -s$'\t' foo.txt

그렇지 않으면 할 수 있습니다

column -t -s"$(printf '\t')" foo.txt

그러나 그조차도 질문에 대답하지 않습니다. 당신은 수직 막대를 얻을 수 있습니다

column -t -s$'\t' -o' | ' foo.txt

다음과 같은 출력을 생성합니다

a    | b    | c    | d    | cat
NULL | NULL | NULL | NULL | NULL
NULL | NULL | NULL | d    | d
NULL | NULL | c    | NULL | c
NULL | NULL | c    | d    | c; d
NULL | b    | NULL | NULL | b
NULL | b    | NULL | d    | b; d
NULL | b    | c    | NULL | b; c
NULL | b    | c    | d    | b; c; d
a    | NULL | NULL | NULL | a
a    | NULL | NULL | d    | a; d
a    | NULL | c    | NULL | a; c
a    | NULL | c    | d    | a; c; d
a    | b    | NULL | NULL | a; b
a    | b    | NULL | d    | a; b; d
a    | b    | c    | NULL | a; b; c
a    | b    | c    | d    | a; b; c; d

헤더 다음에 대시 선을 추가하는 것은 그리 지루하지 않습니다.


완전한 유닉스 / 리눅스 시스템에 액세스 할 수 없다면 Cygwin 또는 다른 유닉스 계열 중 하나를 사용할 수 있습니다.


당신은 그것이 작동하지 않을 수 있다고 지적하기 위해 내 대답에 대해 언급하지 않았습니다. Vim set ts=4설정 과 달리 탭이 기본적으로 8 자이기 때문에 텍스트를 정렬 한 터미널 출력에 잘못되었습니다 .
Ruslan
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.