Администрирование Разное Обработка строк с помощью awk Thu, November 21 2024  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.


Обработка строк с помощью awk Печать
Добавил(а) microsin   

Утилита awk имеется на операционных системах семейства *nix. Есть также она и на платформе Windows в лице системы MSYS - Minimal SYStem (см. "Средства анализа текстовых логов"). В командной строке awk указывают шаблон с набором необходимых действий к строке, которая удовлетворяет шаблону, и входной файл. Как это работает, лучше показать на примере (командная строка MSYS).

Преобразование текста таким образом, что конец строки в стиле *nix (в конце каждой строки только код 0x0A) преобразуется в конец строки в стиле MS-DOS (в конце каждой строки последовательность 0x0D 0x0A). Указанное преобразование файла C:\TEMP\0A.txt в файл C:\TEMP\0D0A.txt Это делает команда:

$ awk '/./{printf("%s\r\n", $0)}' C:\\TEMP\\0A.txt >C:\\TEMP\\0D0A.txt

или команда:

$ awk '{printf("%s\r\n", $0)}' C:\\TEMP\\0A.txt >C:\\TEMP\\0D0A.txt

В первом варианте примера необходимые действия задаются строкой

/./{printf("%s\r\n", $0)}

Все, что слева от фигурных скобок - это шаблон, которому должна соответствовать строка, в этом примере /./ означает любой символ, т. е. шаблону будут удовлетворять все строки. Если шаблон отсутствует, как, например, во втором варианте команды:

{printf("%s\r\n", $0)}

... то это означает, что действия применяются ко всем строкам. Действие тут самое простейшее - берется строка ($0), в конце добавляется последовательность кодов 0x0D 0x0A ("\r\n"), и то, что получилось, выводится. Все это делает оператор printf. Необходимые действия также могут быть записаны в файл (это позволяет писать на awk сложные программы), который указывается в командной строке:

$ awk -f C:\\TEMP\\awk_commands.txt C:\\TEMP\\0A.txt >C:\\TEMP\\0D0A.txt

Содержимое файла awk_commands.txt:

{printf("%s\r\n", $0)}

2. Обратное преобразование (конец строки а-ля MS-DOS преобразуется в конец строки а-ля *nix):

$ awk '{printf("%s\n", $0)}' C:\\TEMP\\0D0A.txt >C:\\TEMP\\0A.txt

 

 

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


Защитный код
Обновить

Top of Page