포함된 구분 기호를 제외하려면 cut을 사용하세요.

포함된 구분 기호를 제외하려면 cut을 사용하세요.

CSV 파일이 있다고 가정해 보겠습니다.

"col1","col2","col3"
"col4","col5,subtext","col6

제가 겪은 문제는 다음과 같습니다.

cut -d, -f1,2 test.txt
"coll1","col2"
"col4","col5

원하는 출력은 다음과 같습니다.

"col1","col2"
"col4","col5,subtext"

답변1

Perl과 함께 제공되는 ParseWords 모듈은 이를 매우 우아하게 다룹니다. 아래 예.

$ perl -MText::ParseWords -nE '@a=quotewords ",",1,$_;say $a[0],",",$a[1]' <test.txt
"col1","col2"
"col4","col5,subtext"
$

답변2

v4를 사용할 수 있는 경우 gawk좋은 해결책이 있습니다.awk를 사용하여 csv를 구문 분석하고 필드 내의 쉼표를 무시합니다.

예:

gawk -vFPAT='[^,]*|"[^"]*"' '{print $1 "," $2}' test.txt

답변3

perl모든 필드가 참조된다고 가정하는 또 다른 솔루션

$ perl -F'/"\K,(?=")/' -lane 'print "$F[0],$F[1]"' test.txt 
"col1","col2"
"col4","col5,subtext"
  • -F'/"\K,(?=")/'필드 구분 기호는 앞뒤에 "쉼표 가 있는 경우에만 쉼표입니다."
  • print "$F[0],$F[1]"처음 두 필드, 구분 기호 인쇄,


grep또한 사용할 수 있습니다

$ grep -oE '^"[^"]*","[^"]*"' test.txt 
"col1","col2"
"col4","col5,subtext"

N개의 필드가 필요한 경우 내부 grep -oE '^("[^"]*",){1}"[^"]*"'숫자를 사용하세요.{}N-1

답변4

아래와 같이 awk로 시도해 볼 수도 있습니다.

awk -F'","'  '{printf "%s\",\"%s\"\n", $1, $2 }' test.txt 

예를 들어;

user@host$ awk -F'","'  '{printf "%s\",\"%s\"\n", $1, $2 }' test.txt 
"col1","col2"
"col4","col5,subtext"

관련 정보