Portál AbcLinuxu, 7. listopadu 2025 02:46
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 < $1
a 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.