Portál AbcLinuxu, 9. května 2025 20:49
Řešení dotazu:
Sakra tak jsem přehlédl jednu věc ve fromátování :( Ty četnosti a slova , jsou po řádcích.
1.řádek jedna četnost a jedno slovo
2.řádek druhá četnost a druhé slovo atd
while read line; do if [[ "$line" =~ (^[0-9]+)[[:space:]]+([a-Z]+) ]]; then echo "${BASH_REMATCH[2]} ${BASH_REMATCH[1]}"; fi; done <./input.file
Ale to je iba z jedno rieseni, ono budu aj lepsie, ale funkcne je aj toto.
while read prvni druhe zbytek; do echo "$druhe $prvni $zbytek" done <./input.fileAle s AWK je to rychlejší.
Uz nie, samozrejme, ze to moje je sice funkcne, ale s read to ide presne tak, ako pises. ;)
cut
a paste
, ale to by asi byl zbytečně silný nástroj.
Ja to rozchodim. :D A plne suhlasim s tym vyzdimanim maxima, takze nie je co riesit s if podmienkou. Jedine uplatnenie by to malo v pripade, keby sa tam nachadzal aj iny vzor, ale to v tomto pripade nehrozi podla zadania.
Ono to ide aj cez sed a tych rieseni, viac ci menej efektivnych, bude hodne.
sed "s/\(^[0-9]\+\)\([[:space:]]\+\)\([a-Z]\+\)/\3\2\1/" input.file
Ale mne osobne sa paci najviac to riesenie s read od teba, to by som ja najskor pouzil.
(10)
je jeden sloupec, ale ( 1)
už dva sloupce, takže jsem to napsal sedem jako ty, read by mi nestačil... Ta možnost s bash
a =~
je taky zajímavá, i když v mém případě se nehodila.
awk '{print $2 " " $1}' <<EOT 2 Ahoj 3 Pes 1 Kocka EOT
$slova
vložit konce řádek mezi slova.
slova="2 Ahoj 3 Pes 1 Kocka" echo $slova 2 Ahoj 3 Pes 1 Kocka echo "$slova" 2 Ahoj 3 Pes 1 Kocka echo -e "$slova" | awk '{print $2 " " $1}' Ahoj 2 Pes 3 Kocka 1
vysledek=`echo -e "$slova" | awk '{print $2 " " $1}'` echo "$vysledek" Ahoj 2 Pes 3 Kocka 1
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.