Я хочу написать скрипт в Баш, который печатает наименьшую повторяющуюся строку стандартного вводаИспользование Grep в то время как петля разрывает петлю
Я написал этот код:
#!/bin/bash
var=1000
while read line
do
tmp=$(grep -c $line)
if [ $tmp -lt $var ]
then
var=$tmp
out=$line
fi
done
var="$var $out"
echo $var
но например при использовании теста, как этот
id1
id2
id3
id1
square
id1
id2
id3
id1
circle
id2
id2
программа только входит в цикл один раз, таким образом, он дает плохой OUTPUT
3 id1
, когда правильный один должен быть
1 square
Эта линия
tmp=$(grep -c $line)
похоже t o нарушить цикл, но я не могу понять, почему. Есть ли способ обойти использование grep в моем коде или любой другой способ исправить мой скрипт?
Почему «круг» ваш ожидаемый выход? Это ни последняя повторяющаяся, ни последняя уникальная строка в вашем примере. – tripleee
Это должно быть наименее повторяющееся, а не последнее повторение;) Тем не менее, ваш ответ ниже мне очень помог;) – Konrad
Итак, вы имеете в виду первую уникальную линию? У вас несколько уникальных линий; они все наименее повторяются. – tripleee