4개 열에 걸친 조건부 awk

4개 열에 걸친 조건부 awk

다음과 같이 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'

관련 정보