如何使用 awk 根据三向交互的频率删除记录

如何使用 awk 根据三向交互的频率删除记录

当因素(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

相关内容