Portál AbcLinuxu, 10. května 2025 08:49

Dotaz: sort -k vrací rozdílné výstupy

28.8.2009 17:04 seamus
sort -k vrací rozdílné výstupy
Přečteno: 166×
Odpovědět | Admin
Příloha:

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

Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

28.8.2009 17:56 Franta Hanzlik
Rozbalit Rozbalit vše Re: sort -k vrací rozdílné výstupy
Odpovědět | | Sbalit | Link | Blokovat | Admin

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")

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.