Portál AbcLinuxu, 5. května 2025 16:23
Ahoj,
potreboval bych v shellu vypsat vsechny spolecne radky dvou sobobru (tj. ne to, co dela comm - ten najde jenom ty radky, ktere jsou v souborech na stejnych pozicich od zacatku).
Dekuju Geralt
while read -r x; do sed '/'$x'/ P;D' < $2; done < $1a ten sposutet tak ze das sh compare.sh prvni.txt druhy.txt
porovnat(){ while read -r y; do if [ "$x" == "$y" ]; then echo -e "$y"; fi done < $1; } while read -r x; do porovnat $2; done < $1;
comm
(a nevadi ze su rovnake riadky v jednom subore), ale subory treba najprv utriedit (vid info coreutils
), takze riesenie by mohlo byt:
comm -12 <(sort file1) <(sort file2)
sort a >x sort b >y join -t^ x yNamiesto ^ dosadit znak, ktory sa v ziadnom subore nevyskytuje
Diky za odpovedi. Radky se v zadnem ze souboru neopakuji. Jeste bych potreboval vedet, jak vypsat ty radky, ktere jsou v souboru A, ale ne v souboru B.
comm -23 <(sort file1) <(sort file2)
comm
pracuje s utriedenymi subormi, takze bud utriedime do pomocnych suborov x a y (a tie potom vymazeme), alebo v bash-i mozeme vytvorit nepomenovanu ruru cez <(prikaz). Vypisuje tri stlpce - riadky len v prvom, len v druhom a v oboch suboroch. Prepinacmi vieme vybrat, ktore stlpce chceme zobrazit.
comm -
XY <(sort file1) <(sort file2)
-12
... vypis len spolocne riadky
-23
... vypis riadky, ktore su len v prvom subore
-13
... vypis riadky, ktore su len v druhom subore
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.