쉼표로 구분된 필드 관리

쉼표로 구분된 필드 관리

텍스트 파일 안에 다음 형식의 빅데이터가 있습니다.

x, xx, xxx, xxxx, , , ,
x, xx, , xxxx, xxxx,

그래서 파일에서 쉼표 뒤의 필드 번호 3이 비어 있는 모든 줄을 제거하고 싶습니다.

결과는 다음과 같습니다.

x, xx, xxx, xxxx, , , ,

그래서 뭐 할까?

답변1

GNU 사용 awk:

$ awk -F' *, *' '$3' file
x, xx, xxx, xxxx, , , ,  

-F필드 구분 기호를 정규식 ␣*,␣*(공백, 별표, 쉼표, 공백, 별표) 으로 설정 했습니다 . 이 표현식은 0개 이상의 공백으로 둘러싸인 쉼표와 일치합니다.

실제 awk스크립트는 $3세 번째 필드가 비어 있지 않으면 해당 줄이 인쇄된다는 의미입니다.

답변2

해결책:

awk -F, '$3!~/^[[:space:]]*$/' file

산출:

x, xx, xxx, xxxx, , , ,

  • -F,- 필드 구분 기호

  • $3!~/^[[:space:]]*$/- 가지고 있는 사람만 고려하세요.비어 있지 않음세 번째 필드(공백 없음)

답변3

진주

perl -ne 'print if /^([^,]*,){2}\h*[^\h,]/' yourcsvfile

처음 두 개의 csv 필드를 살펴본 다음 두 번째 필드의 끝과 세 번째 필드의 시작 부분에 최소한 수평이 아닌 공백, 쉼표가 아닌 항목이 있는지 확인합니다. 일치하면 라인을 찾았습니다.

perl -F, -lane 'print if $F[2] =~ /\S/' yourcsvfile

행을 쉼표로 구분된 필드로 분할하고 배열에 저장한 @F다음 세 번째 필드를 찾아 $F[2]공백이 아닌 필드가 하나 이상 있는지 확인합니다 \S.

sed -e '
   s/,/\n/2;s/,/\n/2
   /\n[[:space:]]*\n/d
   y/\n/,/
' yourfile.csv

세 번째 필드를 개행 문자로 표시합니다. 그런 다음 두 태그 사이에 공백이 있거나 아무것도 없으면 => 줄이 삭제됩니다. OTW에서는 sed기본적으로 마킹 및 인쇄 패턴 공간을 복원합니다 .

관련 정보