grappas
#bash #linux #sysadmin

Mirki

mam sobie pliczek liststoparse.txt

profile/default/modyyy
profile/default/modyyyy
profile/vietnam/modyyy
profile/vietnam/modyyyy
profile/ww2/modyyy
profile/ww2/modyyyy

zawierający powyższe linijki. Docelowo ma parsować listy zawarte w plikach modyyy oraz modyyyy (mniejsza o implementację). Chciałem po prostu do jednej listy dodać te listy bez duplikatów oraz żeby nie powtarzały się poprzednie operacje. Dlatego zmontowałem taki oto kod:

cat liststoparse.txt | grep profile | while read i
do
cat liststoparse.txt | grep profile | while read j
do
if [ "$i" = "$j" ]
then
echo "$i" >> done.txt
elif [ "$i" = "cat done.txt | grep $i" ]
then
echo "pomijam"
else
echo "Teraz $i kontra $j"
break
fi
done
done

gdzie przy else ma się wykonać później kod docelowy.

Niestety efekt tegoż jest taki:

pomijam
pomijam
pomijam
pomijam
pomijam
Teraz profile/default/modyyyy kontra profile/default/modyyy
Teraz profile/vietnam/modyyy kontra profile/default/modyyy
Teraz profile/vietnam/modyyyy kontra profile/default/modyyy
Teraz profile/ww2/modyyy kontra profile/default/modyyy
Teraz profile/ww2/modyyyy kontra profile/default/modyyy

Zawartość pliku done.txt po wykonaniu skryptu:

profile/default/modyyy

Na logikę powinno działać. Co robię źle?

  • Najlepsze
  • Wszystkie komentarze
P.....k
P.....k
@grappas: Na przyszłość:
https://pastebin.com/KRCM5d19 ( ͡° ͜ʖ ͡°)
grappas
grappas Autor
2
https://pastebin.com/f9afUY1j

Działa

w każdym razie dzięki ( ͡° ͜ʖ ͡°)
grappas
grappas Autor
1
@Poranekk: w sumie... ( ͡° ͜ʖ ͡°) zapomniałem, że istnieje ;p
P.....k
P.....k
@grappas: Na początek to jeśli chcesz porównywać stringi to robi się to w ten sposób: if [ "$i" == "$j" ] oraz elif [ "$i" == "cat done.txt | grep $i" ]
grappas
grappas Autor
0
@Poranekk: to bash. W zwykłym shellu wystarczy jedno =.
grappas
grappas Autor
0
@a231: zawartość, ale uniq pomoże :)