( Zahy | 2024. 05. 30., cs – 10:36 )

Értem, hogy vicc, de rossz. :-D

1) print $1"="$2"\n"

mivel a print a - szóközökkel(és nem vesszővel) elválasztott - paramétereit "összeragasztva" írja ki, ezért írható így, de ez már olvasható is:

print $1 "=" $2 "\n"

2) mivel a print - ha csak le nem tiltod, vagy át nem állítod - automatikusan küld egy ORS-t (alapérték "\n"), ezért minden kiírás után 2 soremelés lesz (azaz szöveg, üres sor, szöveg, üres sor, ... ). Ez nem nagyon látszik, hogy miért kell. Ha ehhez még azt is hozzáteszem, hogy ez az egész bekerül egy shell for ciklusának "lista" részébe, ahol viszont definíció szerint az elválasztó karakterek (szóköz, tabulátor, soremelés!!!!) darabszáma rohadtul nem számít (mert lenyeli őket a shell), én ezt betudom annak, hogy azt hitted, kell a print végén kérni soremelést. De nem, szóval szerintem felesleges.

3) egy cat | tr erősen szószátyár, helyette erőforrás-spórolósabb a "tr < indata.txt" forma. (Más parancsok viszont fájlnév paramétert is elfogadnak, tehát az átirányítás is valószínűleg megspórolható.)

4) Ha jól sejtem, MS-környezetből jön a szöveges fájl, ezért dobod ki a UNIX/Linux alatt felesleges kocsivissza jeleket. Szintén spórolásból érdemes elgondolkodni, hogy ha már úgy is meghívsz egy sed-et, akkor nem olcsóbb-e azzal megcsináltatni ezt is (a tr helyett), ehhez csak annyi kell, hogy a sed kapjon még egy -e 's/\r//g' opciót, és csak ez után jöjjön a -e 's/vcenter' rész.

5) a sort | grep olcsóbb, ha felcseréled őket - ekkor nem kell még a később eldobandó üres sorokat is rendezgetni - viszont ha sed | grep | sort van, akkor megint olcsóbb a grep -v helyett szintén egy plusz sed opcióval megcsináltatni ugyanezt a vcenteres opció után azaz

sed .... -s 's/vcenter...' -e '/^$/d' |

6) mindazonáltal, a grep-nek odaadott regexp közönséges (basic) regexp, felesleges a -E (extended) opció (mármint az lenne, ha maradna)

7) legvégül pedig minek rendezed a sed kimenetét, ha amúgy az x=y formájú elemekől asszociatív tömb x indexe és az ahhoz tartozó y érték lesz, és magával a tömbbel se csinálsz semmi olyasmit, ahol fontos lenne ez a bizonyos sorrend. Tudtommal dokumentáció szerint az asszociatív tömb indexeit *valamilyen* sorrendben kapod vissza, egyáltalán nincs definiálva, hogy abba a sorrendben, ahogy bevitted, de még ha úgy is kapnád, a felhasználásánál kb tök mindegy a sorrend. E miatt én a sort-ot ki is hagynám az egészből.

Szóval én kicsit kevesebb erőforrást használva így írnám:

 

for kv in $(awk '{ print $1 "=" $2 }' <(sed -e 's/\r//g' -e 's/vcenter..//g' -e '/^$/d' indata.txt ) ); do