여러 조건이 있는 grep 쉼표로 구분된 필드

여러 조건이 있는 grep 쉼표로 구분된 필드

Linux 서버에 다음 콘텐츠가 포함된 큰 텍스트 파일이 있습니다. 예를 들면 다음과 같습니다.

123456789012345,00,0000,0000
1234567890123450,00,0000,000
12345678901b111,0,0000,0000
1234567/89011111,00,0000,00000

산출

12345678901b111,0,0000,0000       line# 3
1234567/8011111?,00,0000,00000    line# 4

그래서 내 목표는 다음과 같습니다.

나는 라인을 grep하고 싶습니다.

not 15 or 16 digits only before first comma
not 2 digits only before second comma
not 3 or 4 digits only before third comma
not 3 or 4 digits only after third comma

**the line should cover ANY of the predefined conditions**

각 줄의 줄 번호를 인쇄하고 다른 텍스트에 저장합니다.

답변1

AWK해결책:

awk -F, '$1!~/[0-9]{15,16}/ || $2!~/[0-9]{2}/ || $3!~/[0-9]{3,4}/ || $4!~/[0-9]{3,4}/{ 
             printf "%-35s line# %s\n",$0,NR 
         }' file
  • -F,- 쉼표를 ,필드 구분 기호로 처리

  • printf "%-35s line# %s\n"- 정렬/정렬된 형식의 출력


산출:

12345678901b111,0,0000,0000         line# 3
1234567/89011111,00,0000,00000      line# 4

관련 정보