Miałem problem. Mam dużo plików w których jest tekst i data. Chciałem posortować w każdym pliku linie według dat malejąco. Daty pomiędzy 1949-2019 rokiem.
wzorzec:
Kod: Zaznacz cały
ala ma kota 2006
olo 1966
znak 1999 jest taki
Kod: Zaznacz cały
ala ma kota 2006
znak 1999 jest taki
olo 1966
Pomogli koledzy z debian.net:
Kod: Zaznacz cały
#!/bin/bash
sed -e 's/.*\(19[4-9][0-9]\|20[0-1][0-9]\).*/\1/' plik.txt|nl -n ln -s " "|tr -s " "|sed -e "s/\(^[0-9]*\) \(.*\)/\2 \1/"|sort -r|sed -e "s/.* \([0-9]*\)$/\1/"|grep '^[0-9]\+$' > smieci.txt
cat smieci.txt|while read num
do sed -n ${num}p plik.txt;
done
./skrypt.sh > przerobiony.txt
Robię to dlatego, iż plik śmieci zawiera tylko pozycję linii, a bez > wyrzuca do konsoli poprawny wynik. Aby go zapisać przekierowuje do przerobiony.txt. Mogło by być ok ale ja mam wiele plików.
Mój skrypt wygląda teraz tak:
Kod: Zaznacz cały
#!/bin/bash
for file in *.txt ; do
sed -e 's/.*\(19[4-9][0-9]\|20[0-1][0-9]\).*/\1/' $file|nl -n ln -s " "|tr -s " "|sed -e "s/\(^[0-9]*\) \(.*\)/\2 \1/"|sort -r|sed -e "s/.* \([0-9]*\)$/\1/"|grep '^[0-9]\+$' > a/$file
cat a/$file|while read num
do sed -n ${num}p $file;
done; done
To oczywiście zapisuje wszystko do jednego pliku. A tak nie chcę.
Ma ktoś pomysł jak przerobić wzorcowy skrypt by zapisywał od razu wszystko do plików?