输入:
apple.LONG_UUID.BLAH.BLAH
orange
apple.ANOTHER_UUID
chair.01.AB
想要的输出:
apple 1
orange
apple 2
chair
我首先使用
while IFS= read -r line; do
echo "${line%%.*}"
done <<< "$list"
这给了我:
apple
orange
apple
chair
不确定如何从那里继续,请记住实际列表要长得多并且始终是唯一的,唯一持久的是如果存在点,则项目的重要部分位于点之前。
以下是使用的方法
awk
。-F .
将点设置为字段分隔符,这样就可以访问 中的所需前缀$1
。在迭代行中,填充了三个数组:a
获取前缀、b
其当前出现次数,均按行(记录)号 进行索引NR
,同时c
汇总每个前缀的最高出现次数。在最后一行输入(END
)之后,我们迭代行号(从 1 到最后的NR
),发出 (前缀)的实际项a
,后跟一个空格和相应的出现次数(来自b
),如果该前缀的最高计数(来自c
)大于 1。这必须是一个两步过程:直到您阅读整个列表时,您才知道是否存在重复。
在bash中: