加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

bash – 如何根据第3列中的uique标识符打印第1列的第一行和第2列

发布时间:2020-12-15 21:10:12 所属栏目:安全 来源:网络整理
导读:我有一个制表符分隔文件,如下所示: 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 16439
我有一个制表符分隔文件,如下所示:

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行)时,这需要永远.是否有更好的解决方案隐藏在某人的头上?

解决方法

这可以在单个awk中完成,这将比您的脚本更有效:

awk '!($4 in a){a[$4]=$1 FS $2; r[++i]=$4; b[$4]=$3 FS $4 FS $5 FS $6; next;} {b[$4]=$3 FS $4 FS $5 FS $6; next} END{for (k=1; k<=i; k++) print a[r[k]],b[r[k]]}' OFS='t' file
Het 157709      157760 Cluster.90 2 +
Het 164238      164656 Cluster.97 10 +
Het 198007      198035 Cluster.125 3 +

为了使其可读:

awk '!($4 in a){
    a[$4]=$1 FS $2;
    r[++i]=$4;
    b[$4]=$3 FS $4 FS $5 FS $6;
    next;
}
{
    b[$4]=$3 FS $4 FS $5 FS $6;
    next;
}
END {
   for (k=1; k<=i; k++)
       print a[r[k]],b[r[k]]
}' OFS='t' file

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读