LINUX.ORG.RU

А зачем такая конструкция, если можно просто a='windows xp windows linux debian linux'?

a=$(echo $a | tr \ \\n | sort -u)

Ну вот так можно.

Xenius ★★★★★ ()
echo "windows xp windows linux debian linux"  |awk 'BEGIN {ORS=" "} {for (i=1;i<=NF;i++) if (h[$i]==0) {h[$i]=1; print $i}}'
sdio ★★★★★ ()

Если непременно убрать повторяющиеся слова, то:

echo "windows xp windows linux debian linux" \
| awk '{ for(i=1;i<=NF;i++){a[$i]++} }END{ for(i in a){if(a[i]==1){printf("%s ",i)}} }'
А если просто сократить повторения:
echo "windows xp windows linux debian linux" \
| awk '{ for(i=1;i<=NF;i++){a[$i]++} }END{ for(i in a){printf("%s ",i)} }'

blexey ★★★★★ ()
Последнее исправление: blexey (всего исправлений: 1)
$ declare -A a;for i in windows xp windows linux debian linux;do a[$i]=;done
$ echo "${!a[@]}"
xp debian windows linux
NeXTSTEP ★★ ()
Ответ на: комментарий от emulek

там повторы только, а вот сразу кучу слов удаляет

$ echo "a a c a a d a a f a f" |\
sed -r 's/(\<\w+\>)(.*)\1(.*)/\1\2\1\3\n\1/;T;:l;s/(.*)(.*)\n\1$/\2\n\1/;tl;s/\n.*//'
  c   d   f  f

emulek ()
Ответ на: комментарий от tits

раз уж такая пьянка пошла. sed -r 's/'//g' sed не хочет \' не помогает

кавычку запихать?

sed -r 's/\x27//g'

для гурманов sed -r 's/'"'"'//g'

для drBatty: написать скрипт, который начинается с #!/bin/sed -f, там можно кавычки (:

emulek ()
$ cat test.sh 
#!/bin/bash

a="windows xp windows linux debian linux";
b="";
for i in ${a};
do
        COUNT=0;
        for j in ${a};
        do
                if [ "${i}" == "${j}" ];
                then
                        (( COUNT++ ));
                fi
        done

        if [ ${COUNT} -eq 1 ];
        then
                if [ "${b}" != "" ];
                then
                        b="${b} ";
                fi
                b="${b}${i}";
        fi
done

echo "\"${a}\" -> \"${b}\"";

$ ./test.sh 
"windows xp windows linux debian linux" -> "xp debian"
quest ★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.