두 열의 블록 수 불일치를 수정하는 방법

두 열의 블록 수 불일치를 수정하는 방법

마지막 2개 열이 일부 행의 블록 수와 일치하지 않는 파일이 있습니다( $33개 블록이 있지만 2개 블록이 있음). $4전체 파일을 어떻게 복구할 수 있나요? 감사해요

내가 가진 것:

162   167   4,92,4    2,19
143   164   2,4       54,32
532   843   6,4,5     43,23,53  

내가 원하는 것은:

143   164   2,4       54,32
532   843   6,4,5     43,23,53                                                                                                                     

답변1

노력하다

awk 'split($3,A,",") == split($4,B,",")'

남자에 따르면 awk

Split(s, a [, r [, seps] ]) 문자열 s를 정규식 r의 배열 a와 구분 기호 배열 seps로 분할하고 필드 수를 반환합니다.

  • 기본 awk 작업은 암시적 인쇄입니다.

답변2

세 번째 및 네 번째 필드에서 쉼표로 구분된 값의 개수가 다른 행을 필터링하려면 다음을 수행하세요.

awk '{ nc3=split($3,a,","); nc4=split($4,a,",") } nc3 == nc4' data.in

awk함수는 split정규 표현식의 세 번째 인수(이 경우 쉼표)에서 지정된 필드를 분할하고 결과 필드를 a두 번째 인수(여기)의 배열에 저장합니다. 결과 배열을 사용하는 대신 split생성된 배열 항목 수를 반환하는 foct를 사용합니다.

이 숫자( nc3nc4)가 동일하면 해당 행이 인쇄됩니다.

답변3

단순한방법:

awk -F"[[:space:]]+|," '!(NF%2){ print }' file

산출:

143   164   2,4       54,32
532   843   6,4,5     43,23,53

  • !(NF%2)- 짝수 개의 항목이 있는 행만 고려합니다(공백을 ,필드 구분 기호로 처리).

관련 정보