podoba mi się rozwiązanie tac
; jest ciasno i elegancko, ale jak zauważył Micah, tac jest częścią GNU Coreutils, co oznacza, że nie jest domyślnie dostępny w FreeBSD, OSX, Solaris, itp.
Można to zrobić w czystej bashie, bez narzędzi zewnętrznych wymagany.
#!/usr/bin/env bash
unset comma
read foo < parse.txt
bar=(${foo//,/ })
for ((count="${#bar[@]}"; --count >= 0;)); do
printf "%s%s" "$comma" "${bar[$count]}"
comma=","
done
To oczywiście obsługuje tylko jedną linię, na dane wejściowe próbki. Możesz go zawinąć w coś, jeśli potrzebujesz obsługi wielu linii wejścia.
Logika polega na tym, że możemy przekonwertować dane wejściowe na tablicę, zastępując przecinki spacjami. Oczywiście, gdyby nasze dane wejściowe zawierały spacje, należałoby to skorygować. Kiedy już mamy tablicę, przechodzimy do tyłu, drukując każdy rekord.
Należy zauważyć, że nie obejmuje to kończącego znaku nowej linii. Jeśli chcesz, możesz go dodać za pomocą:
printf '\n'
jako ostatnia linia.
Tylko uważaj, że nowa linia będzie częścią ostatniego pola, jeśli istnieje jeden –
DZIĘKUJEMY za zastrzeżenie, że jest to część GNU Coreutils. Ludzie często zapominają, że nie wszyscy używają Linuksa. – ghoti
@EricRenouf - Czy są jakieś obejścia tego problemu? Na przykład, przypuśćmy, że zamiast odwracania pojedynczej linii, OP potrzebuje odwrócić każdą linię w pliku? –