여러 파일을 탭으로 구분된 CSV에서 쉼표로 구분된 CSV로 변환

여러 파일을 탭으로 구분된 CSV에서 쉼표로 구분된 CSV로 변환

.txt형식을 손상시키지 않고 탭으로 구분된 파일을 CSV 파일로 변경하는 방법은 무엇입니까 ?

유형을 에서 으로만 변경했지만 .txt.csv으로 구분된 모든 데이터는 동일한 Excel 셀에 배치됩니다.

그래서 제가 여기서 묻고 있는 것은 다음과 같습니다.

  1. 여러 파일의 탭 문자를 쉼표로 변경하는 방법은 무엇입니까?
  2. .txt그러면 파일을 에서 로 어떻게 변경합니까 .csv?

답변1

다음을 수행할 수 있습니다.

perl -MText::CSV -F'\t' -i.orig -lape '
  BEGIN{$c = Text::CSV->new({binary=>1, eol=>""})}
  $_ = $c->string if $c->combine(@F)' ./*.txt

로 변환하다적절한CSV( perldoc Text::CSVCSV 형식이 필요한 경우 참조) 필요한 것이 탭을 쉼표로 변환하는 것뿐이라면 tr '\t' , < file.txt > file.csv.

답변2

사용csvkit:

입력 파일이 다음과 같다고 가정합니다.

a       10,000  e       u
a       o       e       u
a       o       "hello  world"  u
a       o       e       u

hello여기서 모든 필드는 탭으로 구분되며, 및 사이에는 탭 문자도 있습니다 world(인용문에 표시된 것처럼 두 단어가 동일한 필드에 속하더라도).

$ csvformat -t file.txt
a,"10,000",e,u
a,o,e,u
a,o,hello       world,u
a,o,e,u

이 옵션은 입력이 탭으로 구분되어 있음을 유틸리티에 -t알려줍니다 .csvformat

올바르게 인용 되었으며 10,000주변 인용문은 hello<tab>world이제 명시적이므로 제거되었습니다.

모든 필드를 인용하도록 강제합니다.

$ csvformat -t -U 1 file.txt
"a","10,000","e","u"
"a","o","e","u"
"a","o","hello  world","u"
"a","o","e","u"

입력이 다음과 같은 다른 따옴표 문자를 사용하는 경우

$ cat file.txt
a       10,000  e       u
a       o       e       u
a       o       'quote: "hello  world"' u
a       o       e       u

그런 다음 다음을 수행하십시오.

$ csvformat -t -q "'" file.txt
a,"10,000",e,u
a,o,e,u
a,o,"quote: ""hello     world""",u
a,o,e,u

입력 데이터에 작은따옴표 사용을 지정합니다 -q "'".


.txt여러 파일에 대해 이 명령을 실행하려면 처리하려는 경우 탭으로 구분된 각 파일을 CSV로 변환하세요.현재의목차:

for name in ./*.txt; do
    csvformat -t "$name" >"${name%.txt}.csv"
done

이 비트는 파일 이름에서 확장자를 제거 ${name%.txt}.csv하고 확장자를 추가합니다. 이는 다음과 같이 쓸 수도 있습니다..txt.csv

for name in ./*.txt; do
    csvformat -t "$name" >"./$( basename "$name" .txt ).csv"
done

그러면 변경되지 않은 원본 파일 세트 .txt와 해당 .csv파일이 생성됩니다.

답변3

다음 명령을 시도해 볼 수 있습니다

sed 's/\t/,/g' yourtab.txt > updatefile.csv

관련 정보