Portál AbcLinuxu, 13. května 2025 20:28
ABCDE ---- 1 text BFLMA ---- 1 text XYZ ---- 2 text ATD ---- 1 textChci, aby to vždy porovnalo 1 text a našlo k sobě "partnera" 2 text. Pokud by nenašlo, tak by to řádek smazalo. Výsledek by tedy vypadal takto:
ABCDE ---- 1 text XYZ ---- 2 textDěkuji za rady
grep -c 1 "1 text" soubor && grep -c 1 "2 text" soubor
nebo
awk 'BEGIN{nalezen=0} /1 text/{pom=$0; nalezen=1} /2 text/{if (nalezen==1) {print pom; print $0;}}' soubor
Pokud Ti nevyhovuje toto reseni, specifikuj lepe zadani.
Hráč Tereza - B vojak20 Hráč Honza - A vojak Hráč Jirka - A vojak3 Hráč Karel - A vojak2 Hráč Jméno - A vojak7 Hráč Jméno - B vojak3 Hráč Franta - B vojak Hráč Eliška - A vojaka já potřebuju vybrat jen ty hráče, kteří mají k sobě druhou dvojici dvojice je dána tím, že k "A vojak" patří "B vojak", tedy písmeny A a B a poté stejným stringem čili potřebuju udělat např to, že pro "A vojak", potřebuju najít "B vojak" , pokud nenajdu žádnou B dvojici, tak chci všechny řádky s "A vojak" smazat obdobně pro další, pro "A vojak3" chci najít "B vojak3" výstup tedy bude
Hráč Honza - A vojak Hráč Jirka - A vojak3 Hráč Jméno - B vojak3 Hráč Franta - B vojak
cat soubor | awk '{print $NF} ' | sort | uniq | while read i; do awk 'BEGIN{na=0; nb=0} END{ if(na * nb == 1){print ra; print rb} /A '$i'$/{ if (na==0){ ra=$0; na=1} } /B '$i'$/{ if(nb==0){rb=$0; nb=1} }' soubor doneSkript funguje pouze v pripade, ze na konci radku nejsou prebytecne mezery a zaroven, ze neni platny nasledujici pripad:
... Hrac K - A vojak ... Hrac L - B vojak ... Hrac M - A vojak ... Hrac N - B vojak ...Mysleno tim, ze existuje vice paru se stejnym vojakem.
cat soubor | awk -f awk_reseni.awkTento skript zvladne prebytecne mezery, ale zase bere jen prvni vyskyt paru.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.