Sortowanie słów z pliku - Bash

Sortowanie słów z pliku - Bash
S1
  • Rejestracja: dni
  • Ostatnio: dni
0

Cześć,

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

Kopiuj

Jego zawartość:

ala ma kota
a
kot
ma
ale

Kopiuj

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

Kopiuj

A ja potrzebuję każdy wyraz osobno:

a
ala
ale
kot
kota
ma
ma

Kopiuj

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

Kopiuj

Wiecie może jak to ugryźć?
hauleth
  • Rejestracja: dni
  • Ostatnio: dni
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:

Kopiuj
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:

Kopiuj
a 2
ala 1
ale 5
kot 3
kota 1
ma 1
ma 4
YA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2384
1

Wersja bez awka

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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.