Portál AbcLinuxu, 10. května 2025 08:49
Zdravím,
při psaní skriptu v bashi mi program sort (s použitím parametru -k) při řazení dvou stejných, ale rozdílně strukturovaných datových sad vrací rozdílné výsledky řazení. Pro lepší vysvětlení problému posílám simulační skript, který chybu demonstruje.
Prosím o radu, zda se jedná o chybu v programu sort (snažil jsem se najít nějaké bugreporty na webu ale nic nenašel) případně jestli nedělám nějakou chybu ve skriptování.
#!/bin/bash
#simulace neocekavaneho chovani programu sort
#duvod: podezreni, ze sort s parametrem -k radi velmi podobne retezce jinym zpusobem, nez kdyby byly pouze v jednom (nebo prvnim) sloupci
#nahodne retezce budou slozeny pouze z pismen ABCD
chars=$(echo A\\nB\\nC\\nD)
#100 nahodnych retezcu zapiseme do souboru words
if [ -e words ]; then rm words; fi
for j in $(seq 100);do
rand1=$(seq 10 | shuf -n 1 -)
randstr=""
for i in $(seq $rand1); do
randch=$(echo -e $chars | shuf - -n 1 )
randstr=$(echo $randstr$randch | tr -d '\n')
done
echo $randstr >> words
done
#100 poradovych cisel zapiseme do souboru numbers
seq 100 > numbers
#vytvorime dva "datove" soubory se shodnymi daty, ale ruznym poradim sloupcu
paste -d ":" numbers words > file1
paste -d ":" words numbers > file2
#z kazdeho ze souboru seradime sloupec "words" pomoci sort -k a pouze tento "serazeny" sloupec zapiseme do souboru word*.sort
sort -t ":" -k 2 file1 | awk -F ":" '{print $2}' > words1.sort
sort -t ":" -k 1 file2 | awk -F ":" '{print $1}' > words2.sort
#podle ocekavani by mel byt vysledek nasledujiciho prikazu prazdny(ale neni)
diff words1.sort words2.sort
kdepak, chování je očekávané, lépe číst man stránky :)
("sort -t ":" -k 1 file2" x "
sort -t ":" -k 1,1 file2"
)
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.