[英]print if all value are higher
我有一个像这样的文件:
A 50.40,60.80,56.60,67.80,51.20,78.40,63.80,64.2
B 37.40,37.40,38.40,38.80,58.40,58.80,45.00,44.8
.
.
.
我想打印第2列中所有值都超过50的那些行
输出:
A 50.40,60.80,56.60,67.80,51.20,78.40,63.80,64.2
我试过了:
cat file | tr ',' '\t' | awk '{for (i=2; i<=NF; i++){if($i<50) continue; else print $i}}'
我希望你的意思是你添加到问题中的r标签。
tab <- read.table("file")
splt <- strsplit(as.character(tab[[2]]), ",")
rows <- unlist(lapply(splt, function(a) all(as.numeric(a) > 50)))
tab[rows,]
这会将您的文件读取为以空格分隔的表,将第二列拆分为单个值(生成字符向量列表),然后根据所有值是否> 50计算每个此类行的逻辑值。结果组合成一个逻辑向量,然后用于对数据进行子集化。
字段分隔符可以是任何正则表达式,因此如果在FS
包含逗号,则您的方法可以正常工作:
awk '{ for(i=2; i<=NF; i++) if($i<=50) next } 1' FS='[ \t,]+' infile
输出:
A 50.40,60.80,56.60,67.80,51.20,78.40,63.80,64.2
说明
for循环遍历第二列中的逗号分隔值,如果其中任何一个低于或等于50,则执行next
,即跳到下一行。 如果传递了第一个块,则遇到1
,其值为true并执行默认块: { print $0 }
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.