탭으로 구분 된 또는 쉼표로 구분 된 텍스트 파일에서 모든 필드를 큰 따옴표로 묶는 빠르고 효율적인 방법을 찾고 있습니다.텍스트 파일의 모든 필드를 큰 따옴표로 묶는 방법은 무엇입니까?
필자가 명령 줄에서 실행할 수있는 Perl 한 줄자가 이상적이지만 모든 종류의 솔루션에 개방적입니다. 예를 들어
탭으로 구분 된 또는 쉼표로 구분 된 텍스트 파일에서 모든 필드를 큰 따옴표로 묶는 빠르고 효율적인 방법을 찾고 있습니다.텍스트 파일의 모든 필드를 큰 따옴표로 묶는 방법은 무엇입니까?
필자가 명령 줄에서 실행할 수있는 Perl 한 줄자가 이상적이지만 모든 종류의 솔루션에 개방적입니다. 예를 들어
awk -F, -v OFS='","' -v q='"' '{$0=q$0q;$1=$1}7' file
9 월 콤마 :
kent $ echo "foo,bar,baz"|awk -F, -v OFS='","' -v q='"' '{$0=q$0q;$1=$1}7'
"foo","bar","baz"
탭 9월이 유사하다.
사용 Text::CSV
:
perl -MText::CSV -e'
my $c = Text::CSV->new({always_quote => 1, binary => 1, eol => "\n"}) or die;
$c->print(\*STDOUT, $_) while $_ = $c->getline(\*ARGV)' <<'END'
foo,bar, baz qux,quux
apple,"orange",spam, eggs
END
출력 :
"foo","bar"," baz qux","quux"
"apple","orange","spam"," eggs"
always_quote
옵션은 여기에 중요한 하나입니다. 파일이 구분 기호가 포함 된 이중 인용 문자열을 포함하지 않는 경우
, 당신은
perl -laF, -ne '$" = q(","); print qq("@F")'
+1 좋아요. 내 답변은'perl -F : -lane 'print join ",", map {qq { "$ _"}} @ F' etc/passwd'이어야합니다. ;) – jm666
고맙습니다. 탭으로 구분 된 버전이 무엇이 될지 물어볼 수 있습니까? q (\ t)와 q ("\ t")를 시도했지만 예상 출력을 생성하지 않습니다. – enricoferrero
@ rent0n : 특수 문자를 사용하려면'qq'를 사용해야하므로'qq ("\ t")'입니다. – choroba
사용할 수 있습니다 그리고 노력의 어떤 종류에 열려있어; 너 뭐 해봤 니? – amon
공정한 포인트. 미안 해요, 전 아직 여기 새로 왔습니다. 필자는 LibreOffice Calc를 사용하여이 작업을 수행해 왔지만, 직장에서 Microsoft Office를 사용하고 있습니다. 쉽게 수행 할 수 없습니다. – enricoferrero