gpt4 book ai didi

linux - Uniq 但仅在字符串的一部分

转载 作者:太空狗 更新时间:2023-10-29 12:12:17 27 4
gpt4 key购买 nike

我有这样的字符串:

import a.b.c.d.f.Class1
import a.b.g.d.f.Class2
import a.b.h.d.f.Class3
import z.y.x.d.f.Class4
import z.y.x.d.f.Class5
import z.y.x.d.f.Class6

我想获取字符串第一部分的所有唯一出现。更具体地说,直到第三个时期。所以我这样做:

grep "import curam" -hr --include \*.java | sort | gawk -F "." '{print $1"."$2"."$3}' | uniq

这给了我:

  import a.b.c
import a.b.g
import a.b.h
import z.y.x

但是,当第三个周期之前的字符串是唯一的时,我想获得第一次出现的完整字符串。所以,我想得到:

import a.b.c.d.f.Class1
import a.b.g.d.f.Class2
import a.b.h.d.f.Class3
import z.y.x.d.f.Class4

有什么想法吗?

最佳答案

只需跟踪唯一的第二个字段:

awk -F '[ .]' '!uniq[$2]++' file

也就是说,首先将字段分隔符设置为空格或点。这样,第二个字段始终是点分隔名称中的第一个单词:

$ awk -F '[ .]' '{print $2}' file
a
a
a
z
z
z

然后,只需检查它们何时首次出现:

$ awk -F '[ .]' '!uniq[$2]++' file
import a.b.c.d.f.Class1
import z.y.x.d.f.Class4

There are some subtle variations on the first three tokens between the String so I need to do just [.] Can't do space. I updated the question.

如果你有:

import a.b.c.d.f.Class1
import a.b.g.d.f.Class2
import a.b.h.d.f.Class3
import z.y.x.d.f.Class4
import z.y.x.d.f.Class5
import z.y.x.d.f.Class6

然后您需要拆分第二个 . 分隔字段并检查前三个切片何时重复。这可以使用与上述相同的方法来完成,只是使用 split()。然后使用前三个切片来检查唯一性:

$ awk '{split($2, a, ".")} !uniq[a[1] a[2] a[3]]++' file
import a.b.c.d.f.Class1
import a.b.g.d.f.Class2
import a.b.h.d.f.Class3
import z.y.x.d.f.Class4

关于linux - Uniq 但仅在字符串的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38655484/

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