Here it is ^^
Code:
#!/bin/bash
NO_ARGS=0
E_OPTERROR=65
if [ $# -eq "$NO_ARGS" ]
then
echo -e "\n\tUsage: `basename $0` -ulkdrm filename\n\tType :'awksort -help' for help.\n"
exit $E_OPTERROR
fi
while getopts ":u:l:k:d:r:m:h" Option
do
case $Option in
u )
filename=$2
if [ -f $filename ]
then
sort -u $filename > $filename.uniq
else
echo -e "\ncan't find file $filename\n"
fi
;;
l )
filename=$2
if [ -f $filename ]
then
awk '{ printf substr($NF, 1, length($NF)-1);$NF = "";printf " %s\n",$0 }' $filename | sort -n | awk '{ printf "%s%s;\n",$0,$1 }' | awk '{$1="";sub(/^ +/, "");printf "%s\n",$0}' > $filename.sorted
else
echo -e "\ncan't find file $filename\n"
fi
;;
k )
filename=$3
if [ -f $filename ]
then
opt=$OPTARG
sort -n -t "=" -k $opt $filename > $filename.sorted
else
echo -e "\ncan't find file $filename\n"
fi
;;
d )
filename=$2
if [ -f $filename ]
then
awk '{ printf substr($NF, 1, length($NF)-1);$NF = "";printf "\n" }' $filename | sort -n | awk '{ if ($1 == prev) { printf "%d\n",$0;num++ };prev=$1 } END { printf "\n%d duplicates were found...\n",num }'
else
echo -e "\ncan't find file $filename\n"
fi
;;
r )
filename=$2
if [ -f $filename ]
then
awk '{ printf substr($NF, 1, length($NF)-1);$NF = "";printf " %s\n",$0 }' $filename | sort -n | awk '{ if ($1 != prev) { printf "%s%s;\n",$0,$1 };prev=$1 }' | awk '{$1="";sub(/^ +/, "");printf "%s\n",$0}' > $filename.noduplicate
else
echo -e "\ncan't find file $filename\n"
fi
;;
m )
key=$2
file1=$3
file2=$4
if [ -z $file1 ]
then
echo -e "\nMissing argument. Usage: `basename $0` -m file1 file2\n"
elif [ -z $file2 ]
then
echo -e "\nMissing argument. Usage: `basename $0` -m file1 file2\n"
elif [ -f $file1 -a -f $file2 ]
then
if [ $key -eq 0 ]
then
awk 'END{for(k in _)print _[k]}{_[$NF]=$0}' $file1 $file2 > $file1.updated
else
awk 'END{for(k in _)print _[k]}{_[$'"$key"']=$0}' $file1 $file2 > $file1.updated
fi
elif [ -f $file1 ]
then
echo -e "\nCan't find file $file2\n"
elif [ -f $file2 ]
then
echo -e "\nCan't find file $file1\n"
else
echo -e "\nCan't find any file! Neither $file1 or $file2 were found!\n"
fi
;;
h )
echo ""
echo -e "\tawksort 0.1\n"
echo -e "\tUsage: `basename $0` -ulkdrm options file\n\n"
echo -e "\tOptions :\n"
echo -e "\t-u file\n\tremove 'identical' entries, leaving only unique entries.\n"
echo -e "\t-l file\n\tsort with last field of line.\n"
echo -e "\t-k key file\n\twhere key is the field number to sort.\n"
echo -e "\t-d file\n\treport duplicate 'similar' entries by id when id is the last field.\n"
echo -e "\t-r file\n\tremove duplicate 'similar' entries arbitrary by id when id is the last field.\n"
echo -e "\t-m key file1 file2\n\tmerge file1 with file2 where file2 is an 'update' file.\n\tThis overrides duplicates ids from file1 by replacing them\n\twith file2 records.\n\tUse 0 for key to merge using last field of line as key.\n"
echo -e "\n\tClassic scenario is:\n\tUse -u to remove identical entries, then sort entries using -l or -k,\n\tremove similar entries with -r and finally apply update.\n"
;;
\? )
echo -e "\n\tUsage: `basename $0` -ulkdrm filename\n\tType :'awksort -help' for help.\n"
exit 1;;
* )
echo -e "\n\tUsage: `basename $0` -ulkdrm filename\n\tType :'awksort -help' for help.\n"
exit 1;;
esac
done
shift $(($OPTIND - 1))
exit 0