Kezdőlap › Fórumok › Programozás › Fejtörő – „csak guruknak”…
- This topic has 120 hozzászólás, 10 résztvevő, and was last updated 18 years telt el by
pointux.
-
SzerzőBejegyzés
-
2007-05-19-18:02 #2104355NagyEsta wrote:A -k kapcsolót még nem is használtam. Pedig nem rossz.
Én se használtam addig, amíg nem volt rá szükségem 🙂
2007-05-19-18:02 #2104356NagyEsta wrote:A -k kapcsolót még nem is használtam. Pedig nem rossz.Én se használtam addig, amíg nem volt rá szükségem 🙂
2007-05-19-20:00 #2104357Volt szabad 5 percem, úgyhoy összedobtam egy kis bash scriptet. ;D Lassan már 3 hete dobta fel a témát Vizsla, de mindenki csak kóstolgatja a bash változatot, most itt egy komplex implementáció:
halmaz.sh
Code:#!/bin/shTMP1=”temp.1.txt”
TMP2=”temp.2.txt”
BEVITEL=1
KEZDO=1
ELVALASZTO=”.”function rendezes {
if ! [ -f $1 ]
then
echo „A(z) $1 fájl nem létezik!”
exit 2
fi
cat $1 | sort -u >$2
}function rendezes_karakterlanc {
if ! [ -f $1 ]
then
echo „A(z) $1 fájl nem létezik!”
exit 2
fi
cat $1 |
sed -e ‘s/”([^”]*)”[ t]*/1n/g’ |
grep ‘[^n]’ |
sort -u >$2
}function numerikus_rendezes {
O1=$KEZDO
O2=`expr $O1 + 1`
O3=`expr $O1 + 2`
if ! [ -f $1 ]
then
echo „A(z) $1 fájl nem létezik!”
exit 2
fi
cat $1 | sort -u -t $ELVALASZTO -k ${O1},${O1}n -k ${O2},${O2}n -k ${O3},${O3}n >$2
}function numerikus_rendezes_karakterlanc {
O1=$KEZDO
O2=`expr $O1 + 1`
O3=`expr $O1 + 2`
if ! [ -f $1 ]
then
echo „A(z) $1 fájl nem létezik!”
exit 2
fi
cat $1 |
sed -e ‘s/”([^”]*)”[ t]*/1n/g’ | grep ‘[^n]’ |
sort -u -t ‘$ELVALASZTO’ -k ${O1},${O1}n -k ${O2},${O2}n -k ${O3},${O3}n >$2
}function kivon {
$RENDEZES $1 $TMP1
$RENDEZES $2 $TMP2
diff -u $TMP1 $TMP2 |
grep -v „^—” |
grep „^-„|
cut -b 2- |
sort -u >$3
rm -f $TMP1 $TMP2
}function unio {
if test „$LANC” = „”
then
cat $1 $2 >$TMP1
else
cat $1 $2 | tr ‘n’ ‘ ‘>$TMP1
fi
$RENDEZES $TMP1 $3
rm -f $TMP1
}function metszet {
$RENDEZES $1 $TMP1
$RENDEZES $2 $TMP2
diff -u $TMP1 $TMP2 |
grep „^ ” |
cut -b 2- |
sort -u >$3
rm -f $TMP1 $TMP2
}function segitseg {
echo „Használat: $0 [opciók] — ”
echo „”
echo ” Műveletek:”
echo ” –kivon”
echo ” –unio”
echo ” –metszet”
echo „”
echo ” Opciók:”
echo ” -l Karakterlánc bemenet”
echo ” -n Numerikus bemenet”
echo ” -t Elválasztó (csak numerikus bemenetnél)”
echo ” -k Kezdő oszlop (csak numerikus bemenetnél)”
echo ” -v Bőbeszédű kimenet”
echo „”
echo ” Példa: $0 A–kivon B C”
echo „”
exit 1
}if test $# -le 4
then
segitseg
fifor i in $*
do
if test „$PARANCS” = „elvalaszto”
then
ELVALASZTO=”$i”
elif test „$PARANCS” = „kezdo”
then
KEZDO=”$i”
else
case $i in
-l) LANC=_karakterlanc ;;
-n) NRENDEZ=numerikus_ ;;
-t) if test „$NRENDEZ” = „”
then
echo „Csak numerikus bemenetet lehet elválasztani!”
exit 3
else
PARANCS=elvalaszto
fi ;;
-k) if test „$NRENDEZ” = „”
then
echo „Csak numerikus bemenetnél lehet kezdő kulcsot megadni!”
exit 3
else
PARANCS=kezdo
fi ;;
–kivon) MUVELET=kivon
if test „$BEVITEL” != 2
then
segitseg
fi ;;
–unio) MUVELET=unio
if test „$BEVITEL” != 2
then
segitseg
fi ;;
–metszet) MUVELET=metszet
if test „$BEVITEL” != 2
then
segitseg
fi ;;
-v) NYOMTAT=1 ;;
-h) segitseg ;;
–help) segitseg ;;
-?) segitseg ;;
*) if test „$PARANCS” != „”
then
segitseg
else
case $BEVITEL in
1) FORRAS1=$i
BEVITEL=2 ;;
2) FORRAS2=$i
BEVITEL=3 ;;
3) KIMENET=$i
BEVITEL=4 ;;
*) segitseg ;;
esac
fi;;
esacfi
doneRENDEZES=${NRENDEZ}rendezes${LANC}
$MUVELET $FORRAS1 $FORRAS2 $KIMENETif test „$LANC” != „”
then
mv $KIMENET $TMP1
cat $TMP1 |
sed -e ‘s/([^n]*)/”1″/g’ |
tr ‘n’ ‘ ‘ >$KIMENET
echo „” >>$KIMENET
rm -f $TMP1
fiif test „$NYOMTAT” = „1”
then
echo „”
echo „Művelet: $MUVELET”
echo „”
echo „Forrás 1 (A):”
echo „————-”
cat $FORRAS1
echo „”
echo „Forrás 2 (B):”
echo „————-”
cat $FORRAS2
echo „”
echo „Eredmény (C):”
echo „————-”
cat $KIMENET
echo „”
fiNincs különösebben tesztelve, tényleg csak gyorsan összedobtam. Viszont szándékosan kihagytam a leírást (megjegyzéseket), hogy pontosan mi mit csinál. Akit érdekel, jó kis móka kibogozni.
Az általam tesztelt eredmények:
Code:$ ./halmaz.sh -v A1 –metszet B1 CMűvelet: metszet
Forrás 1 (A):
————-
1.1.3.fc6
1.1.5.fc6
1.2.3.fc6
2.1.4.fc6
1.10.5.fc6Forrás 2 (B):
————-
1.1.3.fc6
1.1.5.fc6
1.2.3.fc6
2.1.7.fc6Eredmény (C):
————-
1.1.3.fc6
1.1.5.fc6
1.2.3.fc6és
Code:$ ./halmaz.sh -l -v A –metszet B CMűvelet: metszet
Forrás 1 (A):
————-
„1.1.3.fc6” „1.1.5.fc6” „1.2.3.fc6” „2.1.4.fc6” „1.10.5.fc6”Forrás 2 (B):
————-
„1.1.3.fc6” „1.1.5.fc6” „1.2.3.fc6” „2.1.7.fc6”Eredmény (C):
————-
„1.1.3.fc6” „1.1.5.fc6” „1.2.3.fc6”2007-05-19-20:00 #2104358Volt szabad 5 percem, úgyhoy összedobtam egy kis bash scriptet. ;D Lassan már 3 hete dobta fel a témát Vizsla, de mindenki csak kóstolgatja a bash változatot, most itt egy komplex implementáció:
halmaz.sh
Code:#!/bin/shTMP1=”temp.1.txt”
TMP2=”temp.2.txt”
BEVITEL=1
KEZDO=1
ELVALASZTO=”.”function rendezes {
if ! [ -f $1 ]
then
echo „A(z) $1 fájl nem létezik!”
exit 2
fi
cat $1 | sort -u >$2
}function rendezes_karakterlanc {
if ! [ -f $1 ]
then
echo „A(z) $1 fájl nem létezik!”
exit 2
fi
cat $1 |
sed -e ‘s/”([^”]*)”[ t]*/1n/g’ |
grep ‘[^n]’ |
sort -u >$2
}function numerikus_rendezes {
O1=$KEZDO
O2=`expr $O1 + 1`
O3=`expr $O1 + 2`
if ! [ -f $1 ]
then
echo „A(z) $1 fájl nem létezik!”
exit 2
fi
cat $1 | sort -u -t $ELVALASZTO -k ${O1},${O1}n -k ${O2},${O2}n -k ${O3},${O3}n >$2
}function numerikus_rendezes_karakterlanc {
O1=$KEZDO
O2=`expr $O1 + 1`
O3=`expr $O1 + 2`
if ! [ -f $1 ]
then
echo „A(z) $1 fájl nem létezik!”
exit 2
fi
cat $1 |
sed -e ‘s/”([^”]*)”[ t]*/1n/g’ | grep ‘[^n]’ |
sort -u -t ‘$ELVALASZTO’ -k ${O1},${O1}n -k ${O2},${O2}n -k ${O3},${O3}n >$2
}function kivon {
$RENDEZES $1 $TMP1
$RENDEZES $2 $TMP2
diff -u $TMP1 $TMP2 |
grep -v „^—” |
grep „^-„|
cut -b 2- |
sort -u >$3
rm -f $TMP1 $TMP2
}function unio {
if test „$LANC” = „”
then
cat $1 $2 >$TMP1
else
cat $1 $2 | tr ‘n’ ‘ ‘>$TMP1
fi
$RENDEZES $TMP1 $3
rm -f $TMP1
}function metszet {
$RENDEZES $1 $TMP1
$RENDEZES $2 $TMP2
diff -u $TMP1 $TMP2 |
grep „^ ” |
cut -b 2- |
sort -u >$3
rm -f $TMP1 $TMP2
}function segitseg {
echo „Használat: $0 [opciók] — ”
echo „”
echo ” Műveletek:”
echo ” –kivon”
echo ” –unio”
echo ” –metszet”
echo „”
echo ” Opciók:”
echo ” -l Karakterlánc bemenet”
echo ” -n Numerikus bemenet”
echo ” -t Elválasztó (csak numerikus bemenetnél)”
echo ” -k Kezdő oszlop (csak numerikus bemenetnél)”
echo ” -v Bőbeszédű kimenet”
echo „”
echo ” Példa: $0 A–kivon B C”
echo „”
exit 1
}if test $# -le 4
then
segitseg
fifor i in $*
do
if test „$PARANCS” = „elvalaszto”
then
ELVALASZTO=”$i”
elif test „$PARANCS” = „kezdo”
then
KEZDO=”$i”
else
case $i in
-l) LANC=_karakterlanc ;;
-n) NRENDEZ=numerikus_ ;;
-t) if test „$NRENDEZ” = „”
then
echo „Csak numerikus bemenetet lehet elválasztani!”
exit 3
else
PARANCS=elvalaszto
fi ;;
-k) if test „$NRENDEZ” = „”
then
echo „Csak numerikus bemenetnél lehet kezdő kulcsot megadni!”
exit 3
else
PARANCS=kezdo
fi ;;
–kivon) MUVELET=kivon
if test „$BEVITEL” != 2
then
segitseg
fi ;;
–unio) MUVELET=unio
if test „$BEVITEL” != 2
then
segitseg
fi ;;
–metszet) MUVELET=metszet
if test „$BEVITEL” != 2
then
segitseg
fi ;;
-v) NYOMTAT=1 ;;
-h) segitseg ;;
–help) segitseg ;;
-?) segitseg ;;
*) if test „$PARANCS” != „”
then
segitseg
else
case $BEVITEL in
1) FORRAS1=$i
BEVITEL=2 ;;
2) FORRAS2=$i
BEVITEL=3 ;;
3) KIMENET=$i
BEVITEL=4 ;;
*) segitseg ;;
esac
fi;;
esacfi
doneRENDEZES=${NRENDEZ}rendezes${LANC}
$MUVELET $FORRAS1 $FORRAS2 $KIMENETif test „$LANC” != „”
then
mv $KIMENET $TMP1
cat $TMP1 |
sed -e ‘s/([^n]*)/”1″/g’ |
tr ‘n’ ‘ ‘ >$KIMENET
echo „” >>$KIMENET
rm -f $TMP1
fiif test „$NYOMTAT” = „1”
then
echo „”
echo „Művelet: $MUVELET”
echo „”
echo „Forrás 1 (A):”
echo „————-”
cat $FORRAS1
echo „”
echo „Forrás 2 (B):”
echo „————-”
cat $FORRAS2
echo „”
echo „Eredmény (C):”
echo „————-”
cat $KIMENET
echo „”
fiNincs különösebben tesztelve, tényleg csak gyorsan összedobtam. Viszont szándékosan kihagytam a leírást (megjegyzéseket), hogy pontosan mi mit csinál. Akit érdekel, jó kis móka kibogozni.
Az általam tesztelt eredmények:
Code:$ ./halmaz.sh -v A1 –metszet B1 CMűvelet: metszet
Forrás 1 (A):
————-
1.1.3.fc6
1.1.5.fc6
1.2.3.fc6
2.1.4.fc6
1.10.5.fc6Forrás 2 (B):
————-
1.1.3.fc6
1.1.5.fc6
1.2.3.fc6
2.1.7.fc6Eredmény (C):
————-
1.1.3.fc6
1.1.5.fc6
1.2.3.fc6és
Code:$ ./halmaz.sh -l -v A –metszet B CMűvelet: metszet
Forrás 1 (A):
————-
„1.1.3.fc6” „1.1.5.fc6” „1.2.3.fc6” „2.1.4.fc6” „1.10.5.fc6”Forrás 2 (B):
————-
„1.1.3.fc6” „1.1.5.fc6” „1.2.3.fc6” „2.1.7.fc6”Eredmény (C):
————-
„1.1.3.fc6” „1.1.5.fc6” „1.2.3.fc6”2007-05-19-21:08 #2104359Vizsla feladatával nekem a legfőbb bajom az volt, hogy túl összetett, tehát már az elején látszódott, hogy sokat kell vele molyolni. Részeredmények miatt meg nem álltam neki.
Ez a diff-es megoldás nagyon cseles, nekem eszembe se jutott 🙁2007-05-19-21:08 #2104360Vizsla feladatával nekem a legfőbb bajom az volt, hogy túl összetett, tehát már az elején látszódott, hogy sokat kell vele molyolni. Részeredmények miatt meg nem álltam neki.
Ez a diff-es megoldás nagyon cseles, nekem eszembe se jutott 🙁2007-05-19-22:02 #2104361Elég sokat használom a diff-et, így „kéznél volt”. Egy picit keveselltem is a megoldás méretét, ezért körítettem hozzá egy kicsit. Most már illik jobban odafigyelni a minőségre is, ahol a modularitás, a hibák lekezelése, bővíthetőség és a helyes működés könnyű ellenőrzése a főbb szempontok.
2007-05-19-22:02 #2104362Elég sokat használom a diff-et, így „kéznél volt”. Egy picit keveselltem is a megoldás méretét, ezért körítettem hozzá egy kicsit. Most már illik jobban odafigyelni a minőségre is, ahol a modularitás, a hibák lekezelése, bővíthetőség és a helyes működés könnyű ellenőrzése a főbb szempontok.
2007-05-20-06:21 #2104363„Vizsla feladatával nekem a legfőbb bajom az volt, hogy túl összetett, tehát már az elején látszódott, hogy sokat kell vele molyolni.”
Na, most ez a megoldás, – ha jól látom – már a két feladatnak a kombinációja…
Egy kis kis file ellenőrzéssel, paraméter kezeléssel, ami viszont nem is volt kötelező feladat. (Habár az már amúgy is csuklógyakorlat…)„Ez a diff-es megoldás nagyon cseles, nekem eszembe se jutott”
Látod, hogy mit tesz, amikor egyesek olvasgatják a man oldalakat…„Egy picit keveselltem is a megoldás méretét, ezért körítettem hozzá egy kicsit.”
Hiihi…
Meg egyébként is… csak magad miatt is. :)))2007-05-20-06:21 #2104364„Vizsla feladatával nekem a legfőbb bajom az volt, hogy túl összetett, tehát már az elején látszódott, hogy sokat kell vele molyolni.”
Na, most ez a megoldás, – ha jól látom – már a két feladatnak a kombinációja…
Egy kis kis file ellenőrzéssel, paraméter kezeléssel, ami viszont nem is volt kötelező feladat. (Habár az már amúgy is csuklógyakorlat…)„Ez a diff-es megoldás nagyon cseles, nekem eszembe se jutott”
Látod, hogy mit tesz, amikor egyesek olvasgatják a man oldalakat…„Egy picit keveselltem is a megoldás méretét, ezért körítettem hozzá egy kicsit.”
Hiihi…
Meg egyébként is… csak magad miatt is. :))) -
SzerzőBejegyzés
- Be kell jelentkezni a hozzászóláshoz.
legutóbbi hsz