gpt4 book ai didi

bash - 如何按外观顺序打印唯一值?

转载 作者:行者123 更新时间:2023-12-03 16:02:49 24 4
gpt4 key购买 nike

我试图获得独特的值(value)
从下面的列表中,但离开
原始顺序中的唯一值。

这是出现的顺序。

group
swamp
group
hands
swamp
pipes
group
bellyful
pipes
swamp
emotion
swamp
pipes
bellyful
after
bellyful

我试过结合 sortuniq命令但输出按字母顺序排序,如果我不使用 sort 命令,则 uniq 命令不起作用。
$ sort file | uniq
after
bellyful
emotion
group
hands
pipes
swamp

我想要的输出是这样的
group
swamp
hands
pipes
bellyful
emotion
after

我怎样才能做到这一点?

最佳答案

一个简短的、拥挤的 awk 调用将完成工作。我们将创建一个关联数组,并在每次看到一个单词时进行计数:

$ awk '!count[$0]++' file
group
swamp
hands
pipes
bellyful
emotion
after

解释:
  • awk 一次处理一行文件,$0是当前行。
  • count是一个关联数组,将行映射到我们看到它们的次数。 awk 不介意我们访问未初始化的变量。它会自动生成 count一个数组并将元素设置为 0当我们第一次访问它们时。
  • 每次看到特定行时,我们都会增加计数。
  • 我们希望整个表达式在我们第一次看到一个词时评估为真,并且每次都为假。如果为真,则打印该行。当它为假时,该行被忽略。第一次看到一个词count[$0]0 ,我们将其否定为 !0 == 1 .如果我们再次看到这个词 count[$0]是正的,否定给出 0 .
  • 为什么 true 表示该行已打印?我们使用的一般语法是 expr { actions; } .当表达式为真时,采取行动。但 Action 可以省略;如果我们不写,默认操作是 { print; } .
  • 关于bash - 如何按外观顺序打印唯一值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60688537/

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