다음과 같이 9개의 열이 있는 탭으로 구분된 파일이 있습니다.
1 25555818 T 14 0 0 0 14 0:0:0:14
2 25555819 T 14 7 0 0 7 7:0:0:7
3 25555820 G 13 0 0 13 0 0:0:13:0
4 25555821 A 0 0 0 0 0 0:0:0:0
5 25555822 G 11 0 0 11 0 0:0:0:0
6 25555823 T 11 2 0 0 9 2:0:0:9
7 25555824 T 11 0 0 0 11 0:0:0:11
8 25555825 G 11 5 0 3 3 5:0:3:3
5, 6, 7, 8열에 0보다 큰 값이 2개 이상 있는 행만 유지하고 싶습니다. 따라서 위의 예에서 유지하려는 행은 2,6,8행입니다. 즉, 5~8열에 0이 3개 이상 있으면 해당 행을 삭제해야 합니다.
문제는 열 9가 열 5-8을 병합한 결과이므로 패턴 일치에도 사용될 수 있다는 것입니다. 그러나 이전과 마찬가지로 패턴이 3개의 연속 0일 필요는 없습니다. 4개의 값 중 0이 3개 이상 있어야 합니다.
답변1
한 가지 방법은 다음과 같습니다.
awk 'BEGIN{FS="\t"} (($5!=0)+($6!=0)+($7!=0)+($8!=0))>=2'
C 해킹에 대한 깔끔한 변형도 있습니다.
awk -F $'\t' '(!!$5+!!$6+!!$7+!!$8)>=2'