【问题标题】:Count how many occurences are greater or equel of a defined value in a line计算一行中有多少次出现大于或等于定义的值
【发布时间】:2015-08-25 18:08:53
【问题描述】:

我有一个 N=10000 行的文件 (F1),每行包含 M=20000 个数字。我有另一个文件(F2),其中 N=10000 行只有 1 列。如何计算文件 F2 的第 i 行中出现的次数大于或等于文件 F2 中第 i 行的出现次数?我尝试使用带有 awk / sed 的 bash 循环,但我的输出为空。

编辑 > 现在我只成功打印了高于定义值的出现次数。这是一个包含 3 行文件和定义值为 15 的文件的示例(对不起,这是一个非常脏的代码..):

for i in {1..3};do sed -n "$i"p tmp.txt | sed 's/\t/\n/g' | awk '{if($1 > 15){print $1}}' | wc -l; done;

提前致谢,

【问题讨论】:

  • 请编辑问题,向我们展示您尝试过的“带有 awk / sed 的 bash 循环”,然后我们可以帮助您更正它。

标签: bash unix awk sed


【解决方案1】:
awk 'FNR==NR{a[FNR]=$1;next}
        {count=0;for(i=1;i<=NF;i++)
          {if($i >= a[FNR])
            {count++}
          };
        print count
        }' file2 file1

在处理file2时,总行记录等于当前文件的行记录,以当前记录为索引将值存储在数组a中。

将每行的计数初始化为 0。 遍历字段,如果值大于或等于数组 a 中当前 FNR 索引处的值,则递增计数器。 打印计数值

$ cat file1
1 3 5 7 3 6
2 5 6 8 7 7
4 6 7 8 9 4

$ cat file2
6
3
1

$ awk -f file.awk
2
5
6

【讨论】:

    【解决方案2】:

    您可以在单个 awk 命令中完成:

    awk 'NR==FNR{a[FNR]=$1;next}{c=0;for(i=1;i<=NF;i++)c+=($i>a[FNR]);print c}' file2 file1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-18
      • 1970-01-01
      • 2021-12-05
      • 1970-01-01
      • 1970-01-01
      • 2013-04-21
      相关资源
      最近更新 更多