gpt4 book ai didi

bash - 使用 sed/awk 删除多余的行

转载 作者:行者123 更新时间:2023-11-29 09:34:49 25 4
gpt4 key购买 nike

我有一个包含大约 1 亿行的大文件。前 6 行看起来像这样 - 整个文件已经排序。

      bin1  bin2   expected                 observed
1 1 1 9.83035e-06 1
2 1 2 3.91360e-05 3
3 1 3 1.68648e-05 1
4 1 4 3.95938e-05 1
5 1 5 2.17026e-05 1
6 1 6 9.20637e-05 4

令人惊讶的是,文件可能是它需要的两倍大,因为 bin1:bin2 的预期/观察到的数据字段与 bin2:bin1 相同,即 1:5 与 5:1 具有相同的值。

编辑

所以第 9581 行看起来像这样

..       ..    ..     ..                       ..
9581 6 1 9.20637e-05 4

因此,我想在进一步拆分或加载到数据库之前删除多余的行。使用 sed 或 awk 是否有合理有效的方法来做到这一点?或者这是错误的方法?

编辑我想我想做的是...

  1. 使用 awk 遍历每一行,如果 cbin1 > cbin2 交换字段。
  2. 排序我的文件 |独特的

这是第 1 部分,我不知道该怎么做。

谢谢

最佳答案

如果您总是同时拥有 bin1:bin2 和 bin2:bin1,那么您可以这样做:

awk '/^[0-9]/ && $3>=$2' file

这将打印出第三列在数值上大于第二列的任何行,因此将打印 1:2 而不是 2:1。

注意,如果您不是总是同时拥有 bin1:bin2 和 bin2:bin1,那么上述解决方案将丢失数据!

更新:根据已编辑的问题,您可能需要以下内容:

awk '/^[0-9]/ && $3>$2 {a=$2; $2=$3; $3=a} {print}' file | column -t | sort -u

请注意,我们通过 column -t 对其进行管道传输以重建列,因为 awk 中的列重新排序会破坏顺序。

关于bash - 使用 sed/awk 删除多余的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19258464/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com