Potrzebujesz pomocy z C, C++, perl, python, itp.
-
Aykan
- Posty: 80
- Rejestracja: 30 marca 2014, 23:27
- Lokalizacja: Rzeszów
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:
a plik out.txt jest pusty. Ma ktoś jakiś pomysł? Z góry dzięki.
-
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
-
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:
Gdzie mam błąd?
-
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
-
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
-
marcin1982
- Moderator
- Posty: 1731
- Rejestracja: 05 maja 2011, 12:59
- Lokalizacja: Zagłębie Dąbrowskie
Post
autor: marcin1982 »
Jeśli rozwiązany, to proszę odpowiednio oznaczyć temat.
-
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?
-
dedito
- Moderator
- Posty: 3560
- 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 [+]