Вопрос или проблема
Как я могу перевернуть строку в файле в порядке
Пример:
Входной файл:
123
500
1000
LOAN
GOD
10000
01000
Формат вывода:
321
005
0001
NAOL
DOG
00001
00010
Используйте rev(1)
.
perl -lne 'print scalar reverse' < my_file.dat
В Спецификации Одинокого Юникса нет простого команды для этого. Однако, если вы сможете выйти за рамки того, что предоставляет Юникс, вы можете установить rev
или tac
. На самом деле, одна из этих команд может уже быть установлена на вашей системе, несмотря на то, что они не являются частью Юникса.
Очевидно, что поскольку они не являются частью Юникса, вам никогда не следует полагаться на их наличие.
Вы можете использовать команду tac
:
tac inputFile > outFile
TAC(1)
ИМЯ
tac - объединить и напечатать файлы в обратном порядке
ОПИСАНИЕ
Записать каждый ФАЙЛ в стандартный вывод, последняя строка первой. Без ФАЙЛА, или когда ФАЙЛ - читать стандартный ввод.
Это некрасиво, но вы можете сделать это в sed
:
sed 's/$/\n/; :loop; s/\(.\)\(.*\n\)/\2\1/; t loop; s/\n//'
Это
- Добавляет явный перевод строки в конец текущей строки.
:loop
– это метка.- Берет первый символ в строке и перемещает его после переноса строки.
- Если вышеуказанное сработало, переходите к метке цикла и делайте это снова.
- В противном случае удалите лишний перенос строки.
Итак, строка “pots”, например, преобразуется следующим образом:
p o t s
p o t s перевод строки
o t s перевод строки p
t s перевод строки o p
s перевод строки t o p
перевод строки s t o p
s t o p
И так, соответственно, мы заканчиваем на “stop”.
Это может потребовать GNU sed.
perl -n -e "print reverse split //, $_"
FreeBSD и MacOS не имеют “tac” в качестве опции. Вы можете использовать “tail -r”, чтобы изменить порядок строк.
Вы можете использовать sed
:
sed '1!G;h;$!d' inputfile > outfile
Ответ или решение
Для реверса строк в файле в операционных системах Unix существуют несколько подходов и команд, которые могут помочь вам достичь желаемого результата. Ниже представлен обзор различных методов, которые вы можете использовать в зависимости от ваших потребностей и наличия программ в вашей системе.
Способы реверса строк в файле в UNIX
-
Команда
rev
:
Командаrev
предназначена именно для реверсирования строк, путем обращения символов внутри каждой строки. Это самый простой и эффективный способ для вашей задачи. Пример использования:rev input_file.txt > output_file.txt
В этом случае каждую строку из файла
input_file.txt
вы получите с перевернутыми символами вoutput_file.txt
. -
Использование
tac
:
Командаtac
позволяет выводить содержимое файла в обратном порядке строк. Хотя она не переворачивает символы внутри строк, ее также можно использовать для общего реверса порядка строк. Пример использования:tac input_file.txt > output_file.txt
Однако, в соответствии с вашим запросом, это не решает проблему изменения порядка с символами.
-
Использование Perl:
С помощью Perl вы можете создать более сложный однострочный скрипт для реверса строк. Например:perl -n -e 'print reverse split //, $_' input_file.txt > output_file.txt
В этом примере происходит разбиение каждой строки на отдельные символы, а затем их реверс.
-
Команда
sed
:
Еслиrev
илиtac
отсутствуют в вашей системе, вы можете использоватьsed
для создания реверсированного вывода. Хотя данный метод менее интуитивен, он также может быть эффективным:sed 's/$/\n/; :loop; s/\(.\)\(.*\n\)/\2\1/; t loop; s/\n//' input_file.txt > output_file.txt
Этот код работает за счет перемещения каждого символа к концу строки до тех пор, пока не останется ни одного символа.
-
Использование
awk
:
Вы также можете использоватьawk
для достижения схожего результата:awk '{for(i=length;i>0;i--)printf "%s", substr($0,i,1); print ""}' input_file.txt > output_file.txt
Этот подход берёт каждую строку, перебирает её от конца к началу, и выводит результат, переведенный в новый файл.
Заключение
Таким образом, для реверсирования строк в файле в UNIX вы можете использовать различные команды, включая rev
, tac
, perl
, sed
и awk
. Каждый из этих инструментов способен выполнять задачу в зависимости от ваших предпочтений и доступных утилит в вашей системе. Наилучший выбор — это использование rev
, если он доступен, так как он наиболее прост в использовании и эффективно выполняет задачу. Если же вам нужен более сложный реверс, вы можете обратиться к perl
или sed
.
Убедитесь, что на вашей системе установлены все необходимые утилиты, прежде чем переходить к их использованию.