Ответ 1
В GNU coreutils, там tac (1)
Я пишу небольшую оболочку script, которая должна перевернуть строки текстового файла. Есть ли стандартная команда фильтра, чтобы делать такие вещи?
Моим конкретным приложением является то, что я получаю список Git идентификаторов фиксации, и я хочу обработать их в обратном порядке:
git log --pretty=oneline work...master | grep -v DEBUG: | cut -d' ' -f1 | reverse
Самое лучшее, что я придумал, - реализовать reverse
следующим образом:
... | cat -b | sort -rn | cut -f2-
Здесь используется cat
для номера каждой строки, затем sort
, чтобы отсортировать их по убыванию порядкового номера (который заканчивает обратный вспять весь файл), затем cut
, чтобы удалить ненужный номер строки.
Вышеупомянутое работает для моего приложения, но может не работать в общем случае, потому что cat -b
содержит только номера непустых строк.
Есть ли лучший, более общий способ сделать это?
В GNU coreutils, там tac (1)
Ответ не 42, а tac
.
Изменить: Медленнее, но больше потребляемой памяти, используя sed
sed 'x;1!H;$!d;x'
и даже дольше
perl -e'print reverse<>'
Для вашей цели существует стандартная команда:
tail -r file.txt
печатает строки file.txt в обратном порядке!
cat -b только числа непустые строки
Если это единственная проблема, которую вы хотите избежать, то почему бы не использовать "cat -n" для номера всех строк?
: "@(#)$Id: reverse.sh,v 1.2 1997/06/02 21:45:00 johnl Exp $"
#
# Reverse the order of the lines in each file
awk ' { printf("%d:%s\n", NR, $0);}' $* |
sort -t: +0nr -1 |
sed 's/^[0-9][0-9]*://'
Работает как очарование для меня...
Подобно примеру sed, используя perl - возможно, более запоминающимся (в зависимости от того, как ваш мозг подключен):
perl -e 'print reverse <>'
В этом случае просто используйте --reverse
:
$ git log --reverse --pretty=oneline work...master | grep -v DEBUG: | cut -d' ' -f1
rev <name of your text file.txt>
Вы можете даже сделать это:
echo <whatever you want to type>|rev
awk '{a[i++]=$0}END{for(;i-->0;)print a[i]}'
Более быстрый, чем sed
и совместимый для встраивания устройств.