van két kis parancslista, mindkettő egy-egy listát készít.
ha így csinálom:
/bin/ls -1 RexStats*.txt 2>/dev/null | sed "s/RexStats.*_\(.*\)\.txt/\1/" > landing.ls
/bin/ls -1 ../arc/rex > archive.ls
akkor wc -l landing.ls archive.ls
28 landing.ls
3 archive.ls
egyébként így néz ki:
$ cat archive.ls
20100924
20100930
20101001
Arra gondoltam, felesleges átmeneti fájlba kiírnom ezeket, majd beleteszem változóba. Így próbáltam:
ARCHIVE=$(/bin/ls -1 ../arc/rex)
Csakhogy így nincs már soremelés:
$ echo $ARCHIVE
20100924 20100930 20101001
és persze ez nekem nem jó. Tud egyáltalán a változó soremelést tartalmazni? Ha igen, akkor miért nem történik az, amit elképzeltem?
Lehet máshogy? (e kettőt utána sort és uniq dolgozná fel, aztán meg egy harmadikkal diff a közös eredményről)
G
- 1684 megtekintés
Hozzászólások
echo $ARCHIVE | tr -s " " "\n"
talán segíthet a dolgon? nem teszteltem
- A hozzászóláshoz be kell jelentkezni
Tud egyáltalán a változó soremelést tartalmazni?
Igen, de a $() (más néven ``) sajnos lecsípi az érték legvégéről az összes newline-t.
- A hozzászóláshoz be kell jelentkezni
Ez marhaság. Mint az a példából egyértelműen látszik, senki nem csíp le semmit, csak nem echo $a, hanem echo "$a" formában kellene írni, és akkor látszana is az a sorvégjel.
Kornkétan az a lényeg, hogy a shell IFS nevű változója (ez tartalmazza a szavakra tördelésnél alkalmazott elválasztójeleket) alapértelmezetten ezt a három karaktert tartalmazza: szóköz, tabulátor, és soremelés karakter.
- A hozzászóláshoz be kell jelentkezni
Megkövetlek, Egmont. A legvégén tényleg lecsípi.
Bocsánat.
- A hozzászóláshoz be kell jelentkezni
( /bin/ls -1 .... ; /bin/ls -1 .... ) | wc -l
- A hozzászóláshoz be kell jelentkezni
és persze echo $ARCHIVE meg echo "$ARCHIVE" nem ugyanaz
- A hozzászóláshoz be kell jelentkezni
Tartalmazza az a soremelést, csak a megjelenítésnél gyász (tudtommal). Írányítsd bele fájlba és meglátod (mármint az eredményt), ahogy eddig is csináltad. Jah és miért nem ``-t használsz?
----
Hülye pelikán
- A hozzászóláshoz be kell jelentkezni
wc -w
ha úgyis csak szavakat számolsz.
- A hozzászóláshoz be kell jelentkezni
félreértettél valamit. Nem számolok, hanem diffet nézek
- A hozzászóláshoz be kell jelentkezni
Miért nem adod oda a "sort -u" -nak a listákat direktben?
- A hozzászóláshoz be kell jelentkezni
még annyit, hogy a diff-hez talán mégis jobb fájl input-ot adni, viszont nem szükséges a lemez-hez nyúlni, az osztott memóriába irányítanám:
FILE1=$(mktemp /dev/shm/XXXXXX)
FILE2=$(mktemp /dev/shm/XXXXXX)
trap "{ rm -f "$FILE1" "$FILE2"; exit; }" 0 1 2 3 5 15
valami > "$FILE1"
...
diff "$FILE1" "$FILE2"
- A hozzászóláshoz be kell jelentkezni
Biztos vagy benne, hogy Linuxot használ? :-P
- A hozzászóláshoz be kell jelentkezni
nem akartam már leírni, hogy oda, vagy hasonló helyre, ez egyértelmű. csak egy ötlet.
akkor tmpfs.
- A hozzászóláshoz be kell jelentkezni
most néztem, ha dupla idézőjelet használsz, akkor az echo-nál is meg lesznek a newline karakterek (ahogy feljebb is írták):
VAR=$(seq 1 10); echo "$VAR"
- A hozzászóláshoz be kell jelentkezni
más: sed "s/RexStats.*_\(.*\)\.txt/\1/" RexStats*.txt > landing.ls nem?
- A hozzászóláshoz be kell jelentkezni
Majd jön Zahy mester és egy awk sorral megoldja az egészet :-)
--
falura elmegy, városban meg úgy sem nézik...
- A hozzászóláshoz be kell jelentkezni
diff <(ls -1 ../arc/rex|sort) <(ls -1 RexStats*.txt 2>/dev/null | sed "s/RexStats.*_\(.*\)\.txt/\1/"|sort|uniq)
- A hozzászóláshoz be kell jelentkezni