По скоро имах предвид как се тълкува !x[$0] за ++ е ясно 
Awk разделя съдържанието в редовете на колони, спрямо някакъв разделител, подреждайки последователно всеки елемент в променливи $1, $2, $3 и т.н. Променливата $0 означава да се вземе целият ред. Тъй като преди това съм изчистил реда от останалите неща с предшестващите awk и cut команди, то в този случай целият ред се явява името на файла с пътя му (например /home/user/Data/0120100607202850.txt).
В awk можеш да задаваш стойности на аргументи, чиито стойности да използваш след това. В случая сме кръстили нашия аргумент x[], но можеш да го кръстиш както искаш. Този аргумент ще съдържа масив от имената на файловете. Т.е., в процеса на изпълнение аргументът ще добие последователно тези стойности:
x['/home/user/Data/0120100607202850.txt'] = 1;
x['/home/user/Data/0120100607202850.txt'] = 2;
x['/home/user/Data/0120100607202850.txt'] = 3;
x['/home/user/Data/0220100607202843.txt'] = 1;
x['/home/user/Data/0220100607202843.txt'] = 2;
При всяко изпълнение стойността на аргументът се увеличава с единица, благодарение на ++.
Удивителната пред параметрите ни добавя условие редът да бъде изведен на екрана, ако стойността за този аргумент не е зададена, т.е. ако описаната променлива не е дефинирана. Да вземем за пример файла /home/user/Data/0120100607202850.txt. За него в аргумента x[] се създава елемент с име x['/home/user/Data/0120100607202850.txt']. При първото завъртане на while, стойността на x['/home/user/Data/0120100607202850.txt'] все още не е дефинирана (редът все още не е бил срещан), редът се извежда, и се дефинира x['/home/user/Data/0120100607202850.txt'] = 1. При следващото завъртане на while отново се среща файлът /home/user/Data/0120100607202850.txt, но x['/home/user/Data/0120100607202850.txt'] вече е дефиниран, така че редът не се извежда, а само се увеличава стойността на аргумента. Това се случва и със следващите срещания на този ред - аргументът е дефиниран, редът не се извежда, и в крайна сметка се извежда само първото срещане на реда, тъй като само тогава стойността на аргумента не е дефинирана. Същото се случва и с редовете за другите файлове.
Също така когато изпълня скрипта на FreeBSD-то ми изписва:
Usage: grep [OPTION]... PATTERN [FILE]...
Usage: grep [OPTION]... PATTERN [FILE]...
Try `grep --help' for more information.
Try `grep --help' for more information.
,но пък си работи 
Обърни внимание, че ползваш различни shell-ове по подразбиране под Linux и под FreeBSD. Тъй като искаше bash скрипт, при изписването не се съобразих с другите shell-ове. Под FreeBSD най-вероятно използваш sh, а не bash (можеш да видиш кой потребител с кой shell работи във файла /etc/passwd). Тъй като sh е малко по-чувствителен от bash при изписването на аргументи със специални символи, скриптът вади грешка при grep-овете за променливата $i на тези два реда:
GeSHi (Bash):
cat $1 | grep $i | grep 'DOWNLOAD' &>/dev/null
cat $1 | grep $i | grep 'DELETE' &>/dev/null
За да го оправиш, огради променливата $i на тези два реда с единични кавички. Т.е., да станат така:
GeSHi (Bash):
cat $1 | grep '$i' | grep 'DOWNLOAD' &>/dev/null
cat $1 | grep '$i' | grep 'DELETE' &>/dev/null