gpt4 book ai didi

bash - 如何根据第3列的唯一标识符打印第1列的第一行和第2列的最后一行

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

我有一个制表符分隔的文件,如下所示:

Het 157709  157731  Cluster.90  2   +
Het 157739 157760 Cluster.90 2 +
Het 164238 164259 Cluster.97 10 +
Het 164380 164401 Cluster.97 10 +
Het 164396 164417 Cluster.97 10 +
Het 164397 164421 Cluster.97 10 +
Het 164397 164420 Cluster.97 10 +
Het 164399 164420 Cluster.97 10 +
Het 164536 164561 Cluster.97 10 +
Het 164576 164598 Cluster.97 10 +
Het 164599 164615 Cluster.97 10 +
Het 164635 164656 Cluster.97 10 +
Het 198007 198031 Cluster.125 3 +
Het 198007 198028 Cluster.125 3 +
Het 198011 198035 Cluster.125 3 +

我正在寻找一种生成如下文件的有效方法:

Het 157709  157760  Cluster.90  2   +
Het 164238 164656 Cluster.97 10 +
Het 198007 198035 Cluster.125 3 +

对于第 4 列中的每个唯一条目,我写了一行,其中包括第 1 列和第 2 列的第一行,然后是第 3、4、5 和 6 列的最后一行。到目前为止,我已经尝试了以下解决方案但它似乎效率很低:

for i in `awk '{print $4}' filename | sort | uniq`
do
fgrep -F $i -w filename | awk 'NR==1 {printf $1"\t"$2"\t"} END {print $3"\t"$4"\t"$5"\t"$6}' >>filename2
done

问题是,当我有一个巨大的文件(487559 行)时,这需要很长时间。是否有更好的解决方案隐藏在某人的头脑中?

最佳答案

仅当第 4 列中的唯一条目始终具有与第 5 列末尾相同的数据时,此一行才有效。你的例子就是这样,但在我看来并没有真正回答这个问题。尽管如此,FWIW:

paste <(uniq -f3 file | cut -f1,2) <(tac file | uniq -f3 | tac | cut -f3-)

uniq 有一个选项可以控制要比较唯一性的字符数,以及要跳过的前导字段数和要跳过的前导字符数,但不能控制要比较的字段。

关于bash - 如何根据第3列的唯一标识符打印第1列的第一行和第2列的最后一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22214000/

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