요인의 3차 상호작용 빈도(V2*V3*V4)가 5보다 낮은 경우 레코드를 삭제하는 방법.
원시 데이터
ID V2 V3 V4
101 2012 5 1
101 2012 5 1
101 2012 5 1
101 2012 5 1
102 2010 12 2
102 2012 12 2
102 2012 12 2
102 2012 12 2
답변1
"V2"는 2,000을 초과하고 1보다 작은 열은 없으므로 이러한 열의 곱은 주어진 샘플 데이터에서 항상 5보다 큽니다. 하지만:
awk '($2*$3*$4) > 5 { print } NR==1 { print }' /path/to/data
답변2
나는 주파수의 수학을 모르지만 awk를 좋아합니다! 다음은 테스트 파일의 각 레코드를 반복하고 숫자에 곱셈을 수행한 다음 비교하여 5보다 작은지 확인하는 스크립트입니다. 5보다 작으면 인쇄되지 않습니다. 그렇지 않으면 인쇄하십시오.
#!/usr/bin/awk -f BEGIN { print "ID V2 V3 V4 = PRODUCT"; } { TOTAL = int($1 * $2 * $3); if(TOTAL < 5) { # Don't print } else { print $1,"",$2,"",$3,"=",TOTAL; } }
답변3
동일한 요인으로 인해 ID가 변경될 수 있으므로 파일을 두 번 읽을 수 있습니다. 먼저 파일이 몇 번 있는지 계산한 V2_V3_V4
다음 각 행을 다시 확인하고 처음에 더 크거나 같은 개수만 전달합니다 n
(이 예에서는 5).
awk -vn=5 'NR==FNR{++z[$2"_"$3"_"$4];next};
FNR==1{print;next};z[$2"_"$3"_"$4]>=n' infile infile