计算每行值下方的列数

计算每行值下方的列数

我需要按行计算值 < 5 的列数。我的数据如下所示:

1.2 8.9  4.5  2.8 
4.9 10.1 15.3 1.1 
2.1 4.3  3.9  3.3 
.
.

所以想要的输出是这样的:

3
2
4

答案1

每条记录的字段数(默认情况下每行以空格分隔的列)为NF。您可以使用 循环遍历记录中的所有字段for (i = 1; i <= NF; ++i)。字段中的数据将在循环内部i可用。$i例如:

awk '{ count = 0; for (i = 1; i <= NF; ++i) if ($i < 5) ++count; print count }'

或者,更详细地写出来,

awk '
    {
        count = 0

        for (i = 1; i <= NF; ++i)
            if ($i < 5)
                ++count

        print count
    }'

if由于and语句的主体for只是一个语句,因此不需要额外的换行{ ... }(与 C 编程语言一样,但与 Perl 不同)。除非要将同一行上的一个语句与另一个语句分开(例如,;比较上面两个等效代码片段中的使用),否则不需要行末尾的。;

答案2

另一种方法是使用 Perl:

perl -alpe '$_ = grep { $_ < 5 } @F' file

grep 结果的标量赋值将其转换为匹配元素的计数。

答案3

运行输入tr并将所有破折号转换为下划线,用于通过以下方式识别负数dc

$ tr \- _ < inp.txt |
  dc -e '
  [q]sq
  [lN1+sN]sa
  [5>az0<b]sb
  [?z0=q0sNlbxlNpcz0=c]sc
  lcx
 '

相关内容