» »

bash skripta ki bere txt

bash skripta ki bere txt

Mike0 ::

#!/bin/bash

FILE=${@:${#@}}
#echo "$FILE"
if [[ $FILE != *".txt" ]]; then
	echo "neki"
   	#FILE=`echo $HISTFILE` 
elif [ ! -f $FILE ]; then
    echo "Napaka: datoteka ne obstaja."
    exit 1;
fi
seznam=()
n=0
nswitch=0
p=0
if [[ $* == *-p* ]] 
	then
	#echo "zastavica p"
	p=1
fi
if [[ $1 == *-n* ]] 
	then
	#echo "zastavica n"
	#echo $2
	n=$2
	nswitch=1
fi
if [[ $2 == *-n* ]] 
	then
	#echo "zastavica n"
	#echo $3
	n=$3
	nswitch=1
fi


while read line;do

    #echo "Line # $k: $line"
	((k++))

	vrstica="$line"
	OIFS="$IFS"
	IFS=' '
	read -a tabela <<< "${line}"
	IFS="$OIFS"

	count=0
	for string in "${tabela[@]}"
	do	
		#echo $p
		#echo $count
		#echo $n
		#echo $nswitch
		if [[ $p == 0 && $count > 0 ]] 
			then
			#echo "break1"
		   	break
		fi
		save=1
		if [[ $string == *"|"* ]] 
			then
		   	save=0
		fi
		if [[ $string == *"-"* ]] 
			then
		   	save=0
		fi
		if [[ $string == *"."* ]] 
			then
		   	save=0
		fi
		if [[ $save == 1 ]] 
			then
			ukaz=`basename $string` 
			#echo $ukaz
			seznam+=("$ukaz")
			(( count++ ))
		fi
		
	done
done < $FILE
#echo "Seznam vseh ukazov:"
#echo ${seznam[@]}



#printf "%s\n" "${seznam[@]}" > seznamUkazov.txt
	

#sort seznamUkazov.txt | uniq -c


printf "%s\n" "${seznam[@]}" | sort | uniq -c |while read line
  do
    read -d, col1 col2 < <(echo $line)
    if [ $nswitch == 1 ] && [ $n -gt 0 ]
		then
		echo "$col2 $col1"
	   	(( n-- ))
	elif [ $nswitch == 0 ]
    	then
    	echo "$col2 $col1"
	
    fi
  done


exit 0;

def0r ::

Ja?

Mike0 ::

Ta skripta vrne ven besede po abecedi, število pojavitev pa ni razporejeno, mora biti:

skripta se kliče ./skripta.sh text.txt

v text.txt so linux ukazi, ki jih nato sešteje kolikokrat se pojavijo

ls 15
cat 10
cd 8

Kako to urediti

black ice ::

Invictus ::

./skripta.sh text.txt | sort

Pa pač uporabi potrebne opcije glede na svoje želje ...
"Life is hard; it's even harder when you're stupid."

http://goo.gl/2YuS2x

Zgodovina sprememb…

  • spremenil: Invictus ()

c3p0 ::

sort fajl | uniq -c | sort -n

c3p0 ::

ali

sort fajl|uniq -c|sort -nr|awk '{print $2,$1}'

Če mora biti ukaz prvi naveden.

Invictus ::

c3p0 je izjavil:

sort fajl | uniq -c | sort -n

Evo, pa sploh ne rabiš skripte :):D.

Poanta je, na UNIXu se nauči programčkov. Je tako že skoraj vse napisano ...
"Life is hard; it's even harder when you're stupid."

http://goo.gl/2YuS2x

Mike0 ::

Rešeno, zdaj lahko prosim zbrišete temo.


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Arhiviranje serverja s TAR - incremental in FTP na drugo lokacijo in email report - S

Oddelek: Operacijski sistemi
61468 (1379) Daedalus
»

Noob se loti programiranje v BASH

Oddelek: Programiranje
212193 (1593) c3p0
»

[UNIX] arg list too long

Oddelek: Programiranje
331849 (1104) bijonda
»

net in gentoo

Oddelek: Operacijski sistemi
121384 (1250) Poldi112
»

Inštalacija Linux - WinXP

Oddelek: Operacijski sistemi
191421 (1083) Gh0st

Več podobnih tem