Portál AbcLinuxu, 12. května 2025 07:57
sort
generuje řádky, které v původním vstupním souboru vůbec nebyly? To odporuje nejen dokumentaci, ale mé zkušenosti. Když zkusím ten váš příklad na svém systému, výsledek vypadá jako vaše třetí ukázka.
No to prave nemuze nastat. Lze sortu rict, aby jako klic k porovnani pouzil treba druhy sloupecek, ale vzdycky bude soupat s celymi radky, neexistuje aby si "vymyslel" svoje vlastni.
Jeste bych se podival, co presne do sortu posilate, tedy do souboru si presmeroval vysledek toho vseho pred | sort
, a pak to normalne pustil na cistej sort (sort < input.txt
), schvalne, co z toho vznikne.
sort
dostanete řádky, které na vstupu nebyly.
Nemáte pravdu, sort funguje pořád, jen dělá to, co má, ne co vy si představujete. Neuvedete-li klíč, řadí se celé řádky jako řetězce. V tomto smyslu platí např.
'AG001 16000' < 'AG001 4000' < 'AG001 9'
P.S.: ani výstup, který uvádíte, neodpovídá vstupu, který uvádíte.
Ještě doplnění: pokud jsem dobře pochopil, že potřebujete řadit podle prvního sloupce textově a jako druhé kritérium podle druhého sloupce číselně, použijte
sort -k 1,1 -k 2n
pre
, vzhledem k použití příkazu 'cut -c
' záleží velmi výrazně na rozložení mezer. Vstup, který jste teď uvedl, ani zdaleka nevede na výstup, který uvádíte. Tentokrát navíc ani po zkopírování přímo ze zdrojáku stránky.
1 22 AG002 0 0 51071 1 1 708814 238794 16000 60000 51 8 12 12 26 30 3 512 1 22 AG002 1 0 51072 1 1 708814 238794 3000 60000 51 8 12 12 26 30 3 512 1 22 AG002 2 0 51073 1 1 708814 238794 13000 60000 51 8 12 12 26 30 3 512 1 23 BC050 1 0 53182 1 1 717549 263015 5000 60000 53 8 12 12 26 30 3 256 1 23 BC050 2 0 53183 1 1 717549 263015 16000 60000 53 8 12 12 26 30 3 256 1 24 BC050 0 0 53073 1 1 719191 257662 3000 60000 53 8 12 12 26 30 3 256 1 25 AB001 0 0 53092 1 1 719173 257959 3000 60000 53 8 12 12 26 30 3 512 1 25 AB001 1 0 53093 1 1 719173 257959 2000 60000 53 8 12 12 26 30 3 512 1 26 AB001 0 0 55151 1 1 713840 231034 16000 60000 74 8 12 12 26 30 3 512 1 26 VY015 1 0 55152 1 1 713840 231034 16000 60000 55 8 12 12 26 30 3 512 1 26 VY015 2 0 55153 1 1 713840 231034 16000 60000 55 8 12 12 26 30 3 512
grep -v "*" soubor | grep -v "-" | cut -c25-29,39-40,125-130 | sort | awk 'BEGIN { FS=" " } { print ($1,$2,$3 / 1000 ); }' | less
AB001 0 16 AB001 0 3 AB001 1 2 AG002 0 16 AG002 1 3 AG002 2 13 BC050 0 3 BC050 1 5 BC050 2 16 VY015 1 16 VY015 2 16
$ grep -v "*" soubor | grep -v "-" | cut -c25-29,125-130 | sort | awk 'BEGIN { FS=" " } { print ($1,$2 / 1000 ); }' | less AB001 16 AB001 2 AB001 3 AG002 13 AG002 16 AG002 3 BC050 16 BC050 3 BC050 5 VY015 16 VY015 16 $ grep -v "*" soubor | grep -v "-" | cut -c25-29,39-40,125-130 | sort | awk 'BEGIN { FS=" " } { print ($1,$2,$3 / 1000 ); }' | less AB001 0 16 AB001 0 3 AB001 1 2 AG002 0 16 AG002 1 3 AG002 2 13 BC050 0 3 BC050 1 5 BC050 2 16 VY015 1 16 VY015 2 16
AB001 16000 0 AB001 2000 0 AB001 3000 0 AG002 13000 0 AG002 16000 0 AG002 3000 0 BC050 16000 0 BC050 3000 0 BC050 5000 0 VY015 16000 0 VY015 16000 0Nepřipadá mi to špatně. Vám ano? Pro připojení dalšího sloupce zkuste příkaz paste, ale tam budete mít problém, že zarovnáváte mezerami, což nevím jak by se dělalo.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.