CSV 파일에서 빈 필드를 확인하는 방법은 무엇입니까?

CSV 파일에서 빈 필드를 확인하는 방법은 무엇입니까?

내 CSV 파일은 다음과 같습니다(파이프 구분).

apple|banana|pear||grapefruit
lemon|lime|damson|jackfruit
|tangerine|nectarine|plum
apricot|orange|pineapple|coconut|

(다양한 필드에 존재할 수 있는 모든 종류의 공백이나 특수 문자를 가정합니다.)

첫 번째 열과 마지막 열을 포함하여 모든 열의 값이 비어 있는지 확인해야 합니다.

예상 출력:

apple|banana|pear||grapefruit
|tangerine|nectarine|plum
apricot|orange|pineapple|coconut|

어떻게 해야 하나요?

답변1

~처럼댓글에 언급된, 간단하고 분명한 대답은 이지만 grep '||'첫 번째 또는 마지막 열이 비어 있는 경우는 포착하지 못합니다.

따라서 정답(여전히 사용됨 grep)은 다음과 같습니다.

grep '^|\|||\||$' file.txt

이 문자는 백슬래시로 이스케이프하거나 이 옵션을 지정 |하지 않는 한 Grep에 특별한 문자가 아닙니다 . -E그래도 이건 좀 불분명하니 파일에 있는 구분자가반점:

grep '^,\|,,\|,$' file.txt

생략하고 싶다면 그냥 포함시키세요마지막필드는 비어 있지만 다른 필드가 비어 있는 줄을 인쇄합니다. 마지막 경우는 생략하세요.

grep '^|\|||' file.txt

실제로 다음과 같이 각 사례를 별도의 매개변수에 넣으면 무슨 일이 일어나고 있는지 더 쉽게 확인할 수 있습니다.

grep -e '^|' -e '||' -e '|$' file.txt 

답변2

첫 번째 필드와 마지막 필드를 포함하여 빈 필드를 찾습니다.

awk -F\| '{for(i=1;i<=NF;i++) if($i=="") { print $0; next } }' file.csv > out.txt

답변3

awk로 시도해 볼 수 있습니다. 일치하는 줄 번호를 인쇄합니다.

$ awk  '/^\|/ || /\|\|/ || /\|$/{print $0}' input_test 
apple|banana|pear||grapefruit
|tangerine|nectarine|plum
apricot|orange|pineapple|coconut|

원래 질문에 대한 수정 사항을 바탕으로 awk 명령을 다시 디자인했습니다.

설명: awk는 세 가지 조건 중 하나와 일치합니다.

  • /\|\|/는 첫 번째 또는 마지막 필드가 아닌 모든 빈 필드와 일치합니다.
  • /^\|/는 줄 시작 부분의 빈 필드("^")와 일치합니다.
  • /\|$/는 줄 끝의 빈 필드("$")와 일치합니다.

awk는 |를 연산자로 인식하므로 "|"를 일치시키려면 앞에 "\"를 사용해야 합니다.

이제 이 3가지 조건은 awk가 "or"로 해석하는 "||"와 함께 연결됩니다. 그런 다음 이 3가지 조건 중 하나가 일치하면 전체 줄이 인쇄됩니다.

특정 열을 비어 있도록 일치시키려면 다음을 사용할 수 있습니다.

awk -F"|" '!length($1) || !length($4) {print $0} ' input_test

답변4

사용밀러:

$ cat pipe.dat
apple|banana||pear||grapefruit
lemon|lime|damson|jackfruit
|tangerine|nectarine|plum
apricot|orange|pineapple|coconut|

$ cat has-blanks.mlr
@has_empty = false;
for (k,v in $*) {
    if (v == "") {
        @has_empty = true;
        break;
    }
}
filter @has_empty;

$ cat pipe.dat | mlr --nidx --fs pipe put -f has-blanks.mlr
apple|banana||pear||grapefruit
|tangerine|nectarine|plum
apricot|orange|pineapple|coconut|

관련 정보