Как мне изменить порядок строк в файле в UNIX

Вопрос или проблема

Как я могу перевернуть строку в файле в порядке

Пример:

Входной файл:

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

  1. Команда rev:
    Команда rev предназначена именно для реверсирования строк, путем обращения символов внутри каждой строки. Это самый простой и эффективный способ для вашей задачи. Пример использования:

    rev input_file.txt > output_file.txt

    В этом случае каждую строку из файла input_file.txt вы получите с перевернутыми символами в output_file.txt.

  2. Использование tac:
    Команда tac позволяет выводить содержимое файла в обратном порядке строк. Хотя она не переворачивает символы внутри строк, ее также можно использовать для общего реверса порядка строк. Пример использования:

    tac input_file.txt > output_file.txt

    Однако, в соответствии с вашим запросом, это не решает проблему изменения порядка с символами.

  3. Использование Perl:
    С помощью Perl вы можете создать более сложный однострочный скрипт для реверса строк. Например:

    perl -n -e 'print reverse split //, $_' input_file.txt > output_file.txt

    В этом примере происходит разбиение каждой строки на отдельные символы, а затем их реверс.

  4. Команда sed:
    Если rev или tac отсутствуют в вашей системе, вы можете использовать sed для создания реверсированного вывода. Хотя данный метод менее интуитивен, он также может быть эффективным:

    sed 's/$/\n/; :loop; s/\(.\)\(.*\n\)/\2\1/; t loop; s/\n//' input_file.txt > output_file.txt

    Этот код работает за счет перемещения каждого символа к концу строки до тех пор, пока не останется ни одного символа.

  5. Использование 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.

Убедитесь, что на вашей системе установлены все необходимые утилиты, прежде чем переходить к их использованию.

Оцените материал
Добавить комментарий

Капча загружается...