#!/bin/bash

if [[ ${#} -ne 2 ]] ; then
    echo "Expected 2 arguments"
    exit 1
fi

src="${1}"
dst="${2}"

data=$(cat ${src} | awk -F ',' '{printf "%s ", $1} {for (i=2;i<NF;i++) printf "%s,", $i} {printf "%s\n", $NF}' | sort -k2)
maxId=$(echo "${data}" | head -n1 | awk '{print $1}')
maxStr=$(echo "${data}" | head -n1 | awk '{print $2}')

while read id str ; do
    if [[ ${str} != ${maxStr} ]] ; then
                echo "${maxId},${maxStr}" >> ${dst}
        maxId=${id}
                maxStr=${str}
    elif [[ ${id} -lt ${maxId} ]] ; then
                id=${maxId}
                maxStr=${str}
    fi
done < <(echo "${data}")

#Напишете скрипт, който приема два позиционни аргумента – имена на текстови
#файлове в CSV формат:
#8,foo,bar,baz
#2,quz,,foo
#12,1,3,foo
#3,foo,,
#5,,bar,
#7,,,
#4,foo,bar,baz
#10
#Валидни са следните условия:
#• CSV файловете представляват таблица, като всеки ред на таблицата е записан на отделен ред;
#• на даден ред всяко поле (колона) е разделено от останалите със запетая;
#• броят на полетата на всеки ред е константа;
#• в полетата не може да присъства запетая, т.е., запетаята винаги е разделител между полета;
#• ако във файла присъстват интервали, то това са данни от дадено поле;
#• първото поле на всеки ред е число, което представлява идентификатор на реда (ID).
#Примерно извикване: ./foo.sh a.csv b.csv
#Скриптът трябва да чете a.csv и на негова база да създава b.csv по следния начин:
#• някои редове във файла се различават само по колоната ID, и за тях казваме, че формират
#множество Ai
#• за всяко такова множество Ai да се оставя само един ред - този, с най-малка стойност на ID-то;
#• редовете, които не са членове в някое множество Ai се записват в изходния файл без промяна.