繁体   English   中英

如果所有值都更高,则打印

[英]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}}'

我希望你的意思是你添加到问题中的标签。

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM