The UNIX and Linux Forums  
Hello and Welcome from United States to the UNIX and Linux Forums! Thank You for Visiting and Joining Our Global Community.

Go Back   The UNIX and Linux Forums > Top Forums > Shell Programming and Scripting
.
google unix.com




View Single Post in the UNIX and Linux Forums - Click on the Thread or Permalink to View Entire Thread -->
  #7 (permalink)  
Old 06-10-2008
mecano mecano is offline
Registered User
  
 

Join Date: Jun 2008
Posts: 4
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