$ cat sortmerg
#!/bin/bash
usage () {
if [ $# -ne 2 ]; then
	echo "Składnia: $0 plik1 plik2" 2>&1
	exit 1
	fi
}

# Domyślny katalog tymczasowy
: ${TEMPDIR:=/tmp}

# Sprawdź liczbę argumentów wywołania
usage "$@"

# Utwórz pliki tymczasowe na potrzeby sortowania
file1=$TEMPDIR/$$.file1
file2=$TEMPDIR/$$.file2

# Sortuj
sort $1 > $file1
sort $2 > $file2

# Otwórz plik1 i plik2 do odczytu. Użyj deskryptorów 3 i 4.
exec 3<$file1
exec 4<$file2

# Odczytaj pierwszy wiersz z każdego pliku, aby wybrać, od którego pliku zacząć.
read Line1 <&3
status1=$?
read Line2 <&4
status2=$?

# Strategia: dopóki w obu plikach znajdują się dane:
#   Prześlij na wyjście wiersz, który powinien być zapisany jako pierwszy.
#   Odczytaj nowy wiersz z pliku, z którego został pobrany poprzedni wiersz.
while [ $status1 -eq 0 -a $status2 -eq 0 ]
	do
		if [[ "$Line2" > "$Line1" ]]; then
			echo -e "1.\t$Line1"
			read -u3 Line1
			status1=$?
		else
			echo -e "2.\t$Line2"
			read -u4 Line2
			status2=$?
		fi
	done

# Teraz jeden z plików dotarł do końca (EOF).
# Odczytaj pozostałe dane z plików.
# Najpierw plik1:
while [ $status1 -eq 0 ]
	do
		echo -e "1.\t$Line1"
		read Line1 <&3
		status1=$?
	done
# Teraz plik2:
while [[ $status2 -eq 0 ]]
	do
		echo -e "2.\t$Line2"
		read Line2 <&4
		status2=$?
	done

# Zamknij i usuń oba pliki wejściowe
exec 3<&- 4<&-
rm -f $file1 $file2
exit 0
