Sortowanie słów z pliku - Bash

0

Cześć,

Nie mogę poradzić sobie z jednym zadaniem.
Załóżmy, że mam plik tekstowy ```
plik.txt


Jego zawartość:

ala ma kota
a
kot
ma
ale


Chcę posortować wszystkie wyrazy w pliku (wiem, że jest polecenie ```
sort
``` i ono działa, ale wyświetla linia za linią)
tzn.

a
ala ma kota
ale
kot
ma


A ja potrzebuję każdy wyraz osobno:

a
ala
ale
kot
kota
ma
ma


Do tego potrzebuję, by obok każdego wyrazu wypisało mi linię, w której słowo wystąpiło:

a 2
ala 1
ale 5
kot 3
kota 1
ma 4
ma 1


Wiecie może jak to ugryźć?
2

No to masz tutaj 2 osobne zadania:

  1. Podzielenie słów na osobne linie w postaci <słowo> <linia>
  2. Posortowanie tychże słów

Pierwsze najprościej rozwiązać używając AWK, a drugie to już zwykły sort:

awk '{ for (i = 1; i <= NF; i++) { print $i, NR; } }' plik.txt | sort

EDIT: Oczywiście w tym przypadku output będzie trochę inny niż to co podałeś, bo ostatnie ma będą w odwrotnej kolejności:

a 2
ala 1
ale 5
kot 3
kota 1
ma 1
ma 4
1

Wersja bez awka

lineNo=0 && cat plik.txt | while read line; do lineNo=$((lineNo+1)); for k in $line; do echo "$k $lineNo"; done done  | sort

1 użytkowników online, w tym zalogowanych: 0, gości: 1