[megoldva] oszlopátrakás

Írtam egy kis szkriptet, ami nekem nagyon hasznosnak bizonyult.
Megadunk egy fájlnevet megy egy oszlopszámot, és átpakolja az adott oszlopszámon inneni karakteroszlopot a többi után.
Utána rendezi is a fájlt, s így egy (azonos méretű, tabulátormentes sorokat tartalmazó) adatfájlt át lehet indexelni.
A kérdésem az, hogy hogyan lehetne ezt még frappánsabbra csinálni? :-)


cut -c 1-$2 $1 > /tmp/tmpzol1
cut -c $(($2+1))- $1 > /tmp/tmpzol2
paste /tmp/tmpzol2 /tmp/tmpzol1 > /tmp/tmpzol3
perl -pi -w -e 's/\t//' /tmp/tmpzol3
sort -u /tmp/tmpzol3 >/tmp/$1
rm /tmp/tmpzol[123]

Hozzászólások

oszlop=2; fname=test.txt; sed "s/\(.\{${oszlop}\}\)\(.*\)/\2\1/;s/\t//g" "$fname" | sort -u

Naggyon durva. Jól megy, köszi! Amúgy a tabulátor csere nem is kell (én csak azért tettem be, mert a paste alapértelmezetten azt használja az összeillesztés után (és a fájlomban nem szerepelt egyébként)).

Mérési adatok egy 120MB-os, 2 millió soros fájlra Ubuntu 11.04-en:

eredeti szkript:
real 0m30.866s
user 0m25.554s
sys 0m1.280s

Új szkript (picit lassabb; talán a paste/sed sebességkülönbség miatt):
real 0m50.155s
user 0m49.283s
sys 0m0.720s