중복 가능성:
csv 파일을 처리하는 강력한 명령줄 도구가 있습니까?
cut
파일에서 열을 추출 하는 데 사용할 수 있는 것 :
$ cat foo
foo,bar,hello
bash,baz,world
$ cut -d\, -f2 foo
bar
baz
하지만 열에 구분 기호가 있고 그러한 셸 내부에서 안전하다면 어떻게 될까요?
$ cat foo
foo,"hello, world",bar
bash,goodbye,baz
$ cut -d\, -f2 temp12
"hello
goodbye
주변 따옴표 문자 를 존중하라고 지시할 수 있는 방법이 있나요 cut
?""
답변1
적어도 GNU 클리핑에는 적합하지 않습니다.
/* The delimeter character for field mode. */ static unsigned char delim;
(GNU coreutils 소스 코드에 표시된 대로)
답변2
cut
먼저 입력을 따옴표 안의 이스케이프 문자로 전처리하는 경우(예: 따옴표 안의 "_"를 "_u"로 바꾸거나, ","를 "_c"로 바꾸거나, 각 문자를 2단어 섹션 16진수 표기법으로 바꾸면 됩니다) 후처리하여 이스케이프를 복원합니다.
그것은 다음과 같습니다:
perl -pe 's/"(.*?)"/"\"".unpack("H*", $1)."\""/ge' |
cut -d, -f2 |
perl -pe 's/"(.*?)"/"\"".pack("H*",$1)."\""/ge'
(따옴표 내부(또는 외부)에 이스케이프된 따옴표가 없다고 가정).
그러나 필요한 노력을 고려하면 적절한 csv 파서를 사용하거나 Perl과 같은 정규식 엔진을 사용하여 모든 작업을 수행하는 것이 더 나을 것입니다.