用于大型数据集的Linux命令行?

用于大型数据集的Linux命令行?

问题:我有一个很大的 Excel 文件,里面有 1000 多列和 40,000 多行。我必须确定在任意给定单元格中,给定行的值大于 199 的位置。如果任何行在任何给定单元格中没有 >199 那么我想删除这些行。因此我只剩下至少有一个单元格的值为>199 的行。

我也有相同的数据文件作为文本文件,所以我在想最好的方法可能是使用 linux 命令行来解决这个问题,而不是使用 excel 文件(考虑到行数和列数,处理起来很麻烦)。但我是 linux 和 awk 的新手,所以我正在寻找有关如何解决这个问题的一般建议?非常感谢

感谢您的帮助。

下面是数据集的示例图像。在这里,我只想要那些突出显示单元格的行(因为这些行 >200),但我不能只使用排序函数或复杂的 if than 语句,因为我的数据集中有太多列,所以这太耗时了……

在此处输入图片描述

答案1

既然你说过“寻求关于如何解决这个问题的一般建议吗?”以下是一种方法:

如果你知道如何使用 Python,你可以将文件保存为逗号分隔的文件,然后只需编写一小段代码即可运行该文件脚本然后使用csv对数据进行一些操作。您可以使用任何支持 Python 的操作系统。

答案2

我没有太多的一般性建议。具体来说,我建议您使用这个 awk 命令:

awk '{
        over=0
        for (i=1; i<=NF; i++) if ($i > 199) over=1
        if (over) print
     }'

根据您文件中的数字以及我自己编写的一些数字,我创建了一个小型数据文件:

$ cat input
81      23      40
31      0       416     12
2       2       1
157     41      80      201
417     42      17

$ ./myscript input
31      0       416     12
157     41      80      201
417     42      17

删除从文件中的行开始,执行

$ ./myscript input > input.new
$ mv input.new input

笔记:

  • 为了你自己的利益,你应该决定你的要求是> 199,> 200,≥ 200,还是什么。
  • 如果需要保留第 1 行(即第 1 行,标题行),请这样说。
  • 我还没有在大型文件上测试过。  awk对于大量的行(行数)应该不会有任何问题。一千列(字段)可能是一个问题,但我对此表示怀疑。

相关内容