텍스트 파일 안에 다음 형식의 빅데이터가 있습니다.
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
기본적으로 마킹 및 인쇄 패턴 공간을 복원합니다 .