마지막 2개 열이 일부 행의 블록 수와 일치하지 않는 파일이 있습니다( $3
3개 블록이 있지만 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를 사용합니다.
이 숫자( nc3
및 nc4
)가 동일하면 해당 행이 인쇄됩니다.
답변3
단순한앗방법:
awk -F"[[:space:]]+|," '!(NF%2){ print }' file
산출:
143 164 2,4 54,32
532 843 6,4,5 43,23,53
!(NF%2)
- 짝수 개의 항목이 있는 행만 고려합니다(공백을,
필드 구분 기호로 처리).