问题:我有一个很大的 Excel 文件,里面有 1000 多列和 40,000 多行。我必须确定在任意给定单元格中,给定行的值大于 199 的位置。如果任何行在任何给定单元格中没有 >199 那么我想删除这些行。因此我只剩下至少有一个单元格的值为>199 的行。
我也有相同的数据文件作为文本文件,所以我在想最好的方法可能是使用 linux 命令行来解决这个问题,而不是使用 excel 文件(考虑到行数和列数,处理起来很麻烦)。但我是 linux 和 awk 的新手,所以我正在寻找有关如何解决这个问题的一般建议?非常感谢
感谢您的帮助。
下面是数据集的示例图像。在这里,我只想要那些突出显示单元格的行(因为这些行 >200),但我不能只使用排序函数或复杂的 if than 语句,因为我的数据集中有太多列,所以这太耗时了……
答案1
答案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
对于大量的行(行数)应该不会有任何问题。一千列(字段)可能是一个问题,但我对此表示怀疑。