두 개의 필드가 있는 CSV 파일의 유효성을 확인하는 방법

두 개의 필드가 있는 CSV 파일의 유효성을 확인하는 방법

아래와 같이 비어 있지 않은 두 개의 필드만 포함해야 하는 간단한 csv 파일이 있습니다.

다음은 올바른 csv 파일의 예입니다.

$ more file.csv    
why_we_need_help,log_low=53687091200
whats_is_going_on,log_high=1073741824
this_is_caryze,log_low=53687091200
let_me_know_what_to_do,log_high=1073741824
look_on_the_room,log_low=53687091200
.
.
.

목표는 csv 파일에 비어 있지 않은 필드가 두 개만 포함되어 있는지 확인하는 것입니다.

파일에 필드가 두 개만 있는지 확인하기 위해 다음 awk로 시작합니다.

awk 'BEGIN{FS=OFS=","} NF!=2{print "not enough fields" }' file.csv

그러나 아래 예에서는 "필드가 충분하지 않음"을 제공하지 않아 작동하지 않습니다.

why_we_need_help,log_low=53687091200
whats_is_going_on,log_high=1073741824
this_is_caryze,log_low=53687091200
let_me_know_what_to_do,log_high=1073741824
look_on_the_room,

기타 오류 csv 파일의 예:

why_we_need_help,,log_low=53687091200
whats_is_going_on,log_high=1073741824
this_is_caryze,log_low=53687091200,
let_me_know_what_to_do,log_high=1073741824
look_on_the_room,log_low=53687091200,

또는

why_we_need_help log_low=53687091200
whats_is_going_on,log_high=1073741824
this_is_caryze,log_low=53687091200
let_me_know_what_to_do,log_high=1073741824
look_on_the_room,,

답변1

또 다른 awk 옵션은

awk 'BEGIN{FS=OFS=","}NF!=2||$1==""||$2==""{print "Not enough fields";exit 5}' file.csv

두 필드 중 하나가 비어 있는지 명시적으로 확인합니다. 그렇다면 메시지를 인쇄하고 오류 코드 5와 함께 즉시 종료됩니다(숫자는 임의적입니다. 가장 좋아하는 것을 선택하십시오).

답변2

이 시도:

awk 'BEGIN{FS=OFS=","} f{skip} NF!=2||!length($1)||!length($2){f=1} END{if (f) {print "File contains malformed lines"; exit 1}}' file.csv

f파일에 두 개의 ,구분 필드가 포함되어 있지 않거나 두 개의 필수 필드가 비어 있을 때마다 플래그가 설정됩니다. 마지막으로 파일을 구문 분석하는 동안 플래그가 설정되면 메시지를 인쇄하고 요청에 따라 오류 코드 1로 종료됩니다.

플래그가 이미 설정된 경우 첫 번째 규칙은 프로세스 속도를 높이기 위해 라인 구문 분석을 건너뛰게 됩니다. 왜냐하면 잘못된 라인이 있는지 알고 싶기 때문입니다. 따라서 그러한 라인이 발견되면 파일이 잘못된 것임을 알 수 있습니다. 파일의 나머지 부분을 고려해야 합니다.

잘못된 형식의 줄 수를 알고 싶다면 다음과 같은 작은 변경 사항을 사용하여 인쇄할 수 있습니다.

awk 'BEGIN{FS=OFS=","} NF!=2||!length($1)||!length($2){f++} END{if (f) {printf("File contains %d malformed line(s)\n",f); exit 1}}' file.csv

답변3

잘 모르겠지만 당신이 찾고 있는 것은 다음과 같습니다.

awk -F',' 'NF!=2 || /^,|,$/{print "bad:", NR | "cat>&2"; exit 1}' file

해당 라인의 특정 오류를 보고하도록 개선될 수 있습니다.

awk -F',' '
    NF<2 { err="too few fields" }
    NF>2 { err="too many fields" }
    /^,|,$/ { err=(err == "" ? "" : err " and ") "empty fields" }
    err != "" { print err, "at line", NR | "cat>&2"; exit 1 }
' file

또는 모든 줄의 모든 오류를 한 번에 찾으려면 다음을 수행하세요.

awk -F',' '
    NF<2 { err="too few fields" }
    NF>2 { err="too many fields" }
    /^,|,$/ { err=(err == "" ? "" : err " and ") "empty fields" }
    err != "" { print err, "at line", NR | "cat>&2"; err=""; f=1 }
    END { exit f }
' file

답변4

입력 파일

 cat op.txt 
why_we_need_help,log_low=53687091200
whats_is_going_on,log_high=1073741824
this_is_caryze,log_low=53687091200
let_me_know_what_to_do,log_high=1073741824
look_on_the_room,log_low=53687091200
look_on_the_room, 
   ,ajay 

awk 명령

awk -F "," 'NF == "2" {print $0}' filename | sed "s/,/ /g"| sed -n '/\s\{2,\}/!p'| awk '{gsub(" ",",",$0);print}'

산출

why_we_need_help,log_low=53687091200
whats_is_going_on,log_high=1073741824
this_is_caryze,log_low=53687091200
let_me_know_what_to_do,log_high=1073741824
look_on_the_room,log_low=53687091200

파이썬

#!/usr/bin/python
import re
u=re.compile(r' {2,}')
k=open('filename','r')
for i in k:
    q=re.sub(","," ",i)
    if not  re.search (u,q):
        print q.replace(" ",",").strip()

산출

why_we_need_help,log_low=53687091200
whats_is_going_on,log_high=1073741824
this_is_caryze,log_low=53687091200
let_me_know_what_to_do,log_high=1073741824
look_on_the_room,log_low=53687091200

관련 정보