Bash - przerzucenie z pliku do pliku tylko niepowtarzalnych rekordów

0

Witam,
Słabo znam się na bashu a mam do zrobienia takie zadanie:

Mam plik pesel.txt w którym w każdym wierszu jest podany pesel, imie i nazwisko ( każda z tych informacji oddzielona tabulatorem )
Moim zadaniem jest wyciągnąć tylko te nazwiska, które występują tylko raz ( nie powtarzają się w pliku ) posortować je i wrzucić do nowego pliku. Wszystkie moje pomysły były nieudane.

Napisałam coś takiego:

 #!/bin/bash
k=0 #przechodzenie po rekordach z pliku pesel.txt
imie_pesel=2 #zapisywanie tylko nazwisk ( jedno nazwisko od drugiego dzieli pesel i imie
# zapisanie do tablicy - kazdy rekord w oddzielnym bez pierwszego peselu
for WIERSZ in $(cat pesel.txt)
do
  if [ $k -gt 1 ] #nie przepisujemy pierwszego i drugiego rekordu bo to zawsze pesel i imie
  then
    if [ $imie_pesel = 2 ]
    then
      let imie_pesel=0
    else
      let imie_pesel=imie_pesel+1
    fi
    if [ $imie_pesel = 0 ]
    then
      echo $WIERSZ >> pomoc1.txt # w pliku pomoc1.txt same nazwiska
    fi
  fi
  let k=k+1
done
cat pomoc1.txt|sort > pomoc2.txt # w pliku pomoc2.txt posortowane nazwiska
# zapisanie do pliku wynik2.txt tylko nazwisk, ktore wystapily raz
#tworzymy tablice
i=0
tablica=( nazw1 nazw2 )
for WIERSZ in $(cat pomoc2.txt)
do
  tablica[i]=$WIERSZ
  let i=i+1
done
i=0
j=1
for WIERSZ in ${tablica[*]}
do
  if [ ${tablica[i]} = ${tablica[j]} ] #imie w tablica[i] jest unikalne
  then
    while [ ${tablica[i]} = ${tablica[j]}]
    do
      let j=j+1 # przejdz dalej nie zapisujac do pliku powtarzajacych sie nazwisk
    done
    let i=j-1
  else # sa takie same
    echo ${tablica[i]} >>wynik2.txt
  fi
done
rm pomoc2.txt
rm pomoc1.txt

Proszę o jakieś wskazówki

0

Jeśli masz wyświetlić tylko unikatowe i posortowane nazwiska to wystarczy:

awk '{print $3}'  pesel.txt | uniq | sort > out.txt

lub

cut -sf 3 pesel.txt | uniq | sort  > out.txt

A jeśli całe rekordy to:

uniq -f 2 pesel.txt | sort  -k 3 > out.txt

1 użytkowników online, w tym zalogowanych: 0, gości: 1