열 (1)은 빈 선행 셀을 제거합니다. 수정할 수 있습니까?

열 (1)은 빈 선행 셀을 제거합니다. 수정할 수 있습니까?

이 사용법을 고려하십시오칼럼(1):

column -s, -t <<CSV
a,b,c
,ee,ff
CSV

위의 코드 조각은 다음을 내보냅니다.

a   b   c
ee  ff

그러나 나는 다음과 같은 것을 볼 것으로 기대합니다.

a   b   c
    ee  ff

column두 번째 행에서 선행 공백 "셀"이 제거되는 것 같지만 나는 그것을 기대하고 유지하고 싶습니다.

열에서 공백 제거 동작을 비활성화하는 방법이 있습니까? 표준/권장 해결 방법 제안이 있습니까?

나는 사용하려고RS(1), 하지만 이 명령에 대해 다른 질문이 있습니다.rs(1)은 모든 출력을 한 줄에 인쇄합니다. 입력 배열 모양을 복사하는 방법은 무엇입니까?

답변1

사용행복하다(이전 Perl_6)

Raku의 모듈을 사용할 수 있습니다 Text::CSV. 이 모듈은 RFC-4180(및 RFC-4180/RFC-7111)을 준수하는 파일을 출력합니다. 말할 필요도 없이, 빈 선행 셀은 보존됩니다. 아래에서는 다양한 열 구분 기호(탭)를 사용한 출력 데모를 보여줍니다.

~$ raku -MText::CSV -e 'my @a = csv(in => $*IN); csv(in => @a, out => $*OUT, sep => "\t");'  file

입력 예:

a,b,c
,ee,ff

출력 예(탭으로 구분):

a   b   c
    ee  ff

파일이 크거나 CSV 파일을 한 줄씩 읽으려면 아래 링크를 참조하세요.

https://unix.stackexchange.com/a/722776/227738 https://github.com/Tux/CSV/blob/master/doc/Text-CSV.pdf
https://raku.org

답변2

column유틸리티는 각 행의 시작과 끝에서 빈 열을 제거합니다. 이로 인해 관찰되는 열이 잘못 정렬됩니다. 유틸리티에는 이 동작을 비활성화하는 옵션이 없습니다.

일반 CSV 문서를 다른 형식(예: TSV)으로 변환하려는 경우 Miller와 같은 CSV 인식 도구를 사용하는 것이 더 안전한 방법입니다.

$ mlr --icsv --otsv cat <<END_DATA
a,b,c,"d,e"
,ee,ff,"ok ""hello"""
END_DATA
a       b       c       d,e
        ee      ff      "ok ""hello"""
$ mlr --icsv --opprint cat <<END_DATA
a,b,c,"d,e"
,ee,ff,"ok ""hello"""
END_DATA
a b  c  d,e
- ee ff ok "hello"
$ mlr --icsv --opprint --barred cat <<END_DATA
a,b,c,"d,e"
,ee,ff,"ok ""hello"""
END_DATA
+---+----+----+------------+
| a | b  | c  | d,e        |
+---+----+----+------------+
| - | ee | ff | ok "hello" |
+---+----+----+------------+

답변3

"비표준" 도구가 괜찮다면,XSV 툴킷다소 임의적으로 구분된 텍스트 데이터의 형식을 적절하게 지정할 수 있습니다.

xsv table <<CSV
a,b,c
,ee,ff
CSV
a   b   c
    ee  ff

답변4

데이터가 따옴표나 줄 바꿈이 없는 "간단한 CSV"이므로 쉼표는 구분된 필드에만 나타날 수 있으며, 이를 사용하여 awk원하는 효과를 얻을 수 있습니다.

awk -F, 'BEGIN {OFS="\t"} {$1=$1; print}' <<CSV
a,b,c
,ee,ff
CSV

산출

a       b       c
        ee      ff

관련 정보