我有一个包含大约100万行的大量文件.前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
Run Code Online (Sandbox Code Playgroud)
令人惊讶的是,文件可能是它需要的两倍大,因为预期/观察到的数据字段对于bin1是相同的:bin2与bin2相同:bin1即1:5具有与5:1相同的值.
编辑
所以行9581看起来像这样
.. .. .. .. ..
9581 6 1 9.20637e-05 4
Run Code Online (Sandbox Code Playgroud)
因此,我希望在进一步拆分或加载到数据库之前删除冗余行.使用sed或awk有一个合理有效的方法吗?或者这是错误的方法?
编辑我想我想做的是......
这是我不知道该怎么做的第一部分.
谢谢
如果你总是同时拥有bin1:bin2和bin2:bin1那么你可以这样做:
awk '/^[0-9]/ && $3>=$2' file
Run Code Online (Sandbox Code Playgroud)
这将打印出第三列在数字上大于第二列的任何行,因此将打印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
Run Code Online (Sandbox Code Playgroud)
请注意,我们通过列-t管道来重建列,因为awk中的列重新排序会破坏顺序.