[+] [BASH] Skrypt wypisuj

Potrzebujesz pomocy z C, C++, perl, python, itp.
Awatar użytkownika
Aykan
Posty: 80
Rejestracja: 30 marca 2014, 23:27
Lokalizacja: Rzeszów

[+] [BASH] Skrypt wypisujący x losowych wyrazów z pliku i układający go w y kolumn

Post autor: Aykan »

Cześć, muszę napisać skrypt, który wypisze mi wybraną liczbę losowych wyrazów z pliku i ustawi go w podaną liczbę kolumn. Narazie doszedłem do tego:

Kod: Zaznacz cały

 #!/bin/bashrm out.txt
clear
echo "Plik (musi byc w tym samym folderze): "
read file
echo "Liczba kolumn: "
read col
sort -R $file > tmp.txt
column -t $col > out.txt
rm tmp.txt
echo "Wynik losowania jest w pliku out.txt"
Brakuje mi polecenia na wypisywanie podanej ilosci słów, a po wykonaniu programu dostaję błąd:

Kod: Zaznacz cały

 column: 3: No such file or directory
a plik out.txt jest pusty. Ma ktoś jakiś pomysł? Z góry dzięki.
Awatar użytkownika
f1.micro
Beginner
Posty: 119
Rejestracja: 24 lutego 2009, 11:32
Lokalizacja: Kraków

Post autor: f1.micro »

Kod: Zaznacz cały

#!/bin/bash


clear
echo "podaj nazwe pliku"
read plik
echo "podaj liczbe kolumn"
read col
echo "podaj liczbe slow"
read slowa


#zakresw ilosci lini
ilosclini=`wc -l $plik | cut -d ' ' -f 1`
echo $ilosclini


while [ $slowa -ge 0 ]; do
	rand=`shuf -i 1-$ilosclini -n 1`
	echo $rand 
	sed -n "${rand}p" $plik > /tmp/1.txt
	((slowa--))
done


#TUTAJ PODZIEL PLIK /tmp/1.txt na kolumny



Awatar użytkownika
Aykan
Posty: 80
Rejestracja: 30 marca 2014, 23:27
Lokalizacja: Rzeszów

Post autor: Aykan »

Ok, zmieniłem. program wyglada tak:

Kod: Zaznacz cały

 #!/bin/bash



clear
echo "podaj nazwe pliku"
read plik
echo "podaj liczbe kolumn"
read col
echo "podaj liczbe slow"
read slowa




#zakresw ilosci lini
ilosclini=`wc -l $plik | cut -d ' ' -f 1`
echo $ilosclini




while [ $slowa -ge 0 ]; do
    rand=`shuf -i 1-$ilosclini -n 1`
    echo $rand 
    sed -n "${rand}p" $plik > /tmp/1.txt
    ((slowa--))
done


cat /tmp/1.txt | pr -$col -d -t > ./out.txt
działa tak:

Kod: Zaznacz cały

 podaj nazwe plikutest.txt
podaj liczbe kolumn
4
podaj liczbe slow
20
162
95
45
100
55
45
70
38
127
129
37
78
109
149
30
13
72
83
113
16
158
139
plik początkowy:

Kod: Zaznacz cały

 abdominalesabrazar
abrir
aburrir
acercarse
acostar
adelgazar
afeitar
alejarse
alimentacion
amar
animar
aprender
apuntar
arreglar
arrepentirse
articulacion
atreverse
averiguar
bajar
banarse
barbilla
barriga
beber
bella
besar
biera
boca
brazo
bufanda
buhos
calcetinas
calentar
calentar
caminar
caminar
cansarse
cara
cerca
cerebro
cintura
cinturon
claves
codo
comer
comprar
conocer
copartir
corazon
correr
cuaderno
cuello
defender
dejarse
dejar
delgado
despedir
divertido
dormirse
ducharse
dura
engordar
equivocarse
esconder
espalda
espectacular
estomago
estrecho
foto
frente
garganta
grabados
guantes
guinar
habitacion
hacer
hacer
higado
hombre
hombro
hondo
hueso
huir
ir
jersey
labios
(la)
latir
lavarse
leer
lejos
lengua
levantar
ligera
llamar
llegar
llevar
mano
maquina
marcharse
marmol
mejilla
monedero
monitora
moto
mujer
muneca
nariz
oler
orejas
parecer
pelo
pelo
pelo
pendientes
pescado
pierna
pie
pilas
pintarse
pintoresco
poner
ponerse
pueblo
puerta
puerto
pulmon
quedar
quejarse
queso
radio
regalar
reirse
reloj
respirar
responder
rinon
rodilla
ruido
saber
sacacorchos
sacar
salir
saludar
sentir
sobre
sudar
talon
tarde
tobillo
tocar
tonto
toser
traer-
tren
tronco
uńa
vender
vender
viejas
vientre
yo
plik wyjsciowy:

Kod: Zaznacz cały

 ruido
Gdzie mam błąd?
Awatar użytkownika
f1.micro
Beginner
Posty: 119
Rejestracja: 24 lutego 2009, 11:32
Lokalizacja: Kraków

Post autor: f1.micro »

Ja Ci dałem zarys jak to powinno wyglądać, ale widzę że generalnie działa dobrze :)

Co do poprawy:
Zakomentuj dwie linie - nie będą powjawiały Ci się cyferki (to było po to, żebyś widział co się dzieje):

Kod: Zaznacz cały

[font=arial]#echo $ilosclini
#echo $rand 
[/font]
Aby nie tylko jedno słowo było wybrane zmień na:

Kod: Zaznacz cały

sed -n "${rand}p" $plik [size=167][B]>>[/B][/size] /tmp/1.txt

I jeszcze jedna kwestia. Albo usuwaj plik /tmp/1.txt, albo żeby było ładniej zrób też randomowy np:

Kod: Zaznacz cały

....

tmpfile=`date +%s`
....
[font=arial]sed -n "${rand}p" $plik [size=167][B]>>[/B][/size] /tmp/$tmpfile[/font]
....
[font=arial]c[/font]at /tmp/$tmpfile | pr -$col -d -t > ./out.txt
rm /tmp/$tmpfile
Awatar użytkownika
Aykan
Posty: 80
Rejestracja: 30 marca 2014, 23:27
Lokalizacja: Rzeszów

Post autor: Aykan »

Ok, coś tam pokombinowałem i zrobiłem trochę na około bo się gubię w pętlach.
Program wygląda tak:

Kod: Zaznacz cały

 #!/bin/bash

clear
echo "podaj nazwe pliku"
read plik
echo "podaj liczbe kolumn"
read col
echo "podaj liczbe slow"
read slowa
sort -R $plik > tmp.txt
tail -n $slowa tmp.txt | pr -$col -d -t > wynik.txt
less wynik.txt
Dzięki za pomoc :D
Awatar użytkownika
marcin1982
Moderator
Posty: 1730
Rejestracja: 05 maja 2011, 12:59
Lokalizacja: Zagłębie Dąbrowskie

Post autor: marcin1982 »

Jeśli rozwiązany, to proszę odpowiednio oznaczyć temat.
Awatar użytkownika
Aykan
Posty: 80
Rejestracja: 30 marca 2014, 23:27
Lokalizacja: Rzeszów

Post autor: Aykan »

Jeśli rozwiązany, to proszę odpowiednio oznaczyć temat.
Jak oznaczyć temat?
Awatar użytkownika
dedito
Moderator
Posty: 3512
Rejestracja: 18 listopada 2013, 21:07
Lokalizacja: Gliwice

Post autor: dedito »

Aykan pisze:Jak oznaczyć temat?
Zaawansowana edycja pierwszej wiadomości.
w przypadku kiedy dany temat został rozwiązany, należy dodać do jego tytułu [+]
Zablokowany