Вопрос

Я пишу небольшой сценарий оболочки, который должен перевернуть строки текстового файла.Есть ли стандартная команда фильтра для подобных вещей?

Мое конкретное приложение заключается в том, что я получаю список идентификаторов коммитов 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 нумеруют только непустые строки.

Есть ли лучший и более общий способ сделать это?

Это было полезно?

Решение

Другие советы

Ответ не 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 <*>quot;
#
#   Reverse the order of the lines in each file

awk ' { printf("%d:%s\n", NR, <*>);}' $* |
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++]=<*>}END{for(;i-->0;)print a[i]}'

Более быстрый, чем sed , и совместимый для таких устройств, как openwrt.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top