«Работать добросовестно — значит: работать, повышая свою квалификацию, проявляя инициативу в совершенствовании продукции, технологий, организации работ, оказывая не предусмотренную должностными инструкциями помощь другим сотрудникам (включая и руководителей) в общей им всем работе.

Спец курс (Автоматизация процесса проектирования)/Практические задания 3 — различия между версиями

Материал из Wiki
Перейти к: навигация, поиск
м (Разворот байт)
(Перед выполнение ознакомиться с правилами оформления задания)
 
(не показаны 3 промежуточные версии 2 участников)
Строка 3: Строка 3:
 
* [[Спец курс (Автоматизация процесса проектирования)/Практические задания (Пример)]]
 
* [[Спец курс (Автоматизация процесса проектирования)/Практические задания (Пример)]]
  
Файл для задач.
+
== Задания по SED ==
 +
Задание будет успешно выполнено, если были использованы конструкции языка bash и редактор sed (не допускается использовать другие утилиты кроме SED, допускается помогать при обработке из bash).  
  
=== Общие требования к интерфейсу программ ===
+
# Двойное пространство между строками между каждой второй строкой
 
+
# Тройное пространство между строками исключая пустые строки (на выходе содержатся не больше одной пустой строки между двумя строками с текстом)  
* первый параметр обязательный - имя входного файла. Если этот параметр не задан, то вывести сообщение о том как использовать программу (usage)
+
# Десятерное пространство между каждой 2-ой строкой
* второй параметр необязательный - имя выходного файла. Если параметр не задан, то сформировать имя выходного файла из имени входного по шаблону: <имя_вх_файла>_out.<расширение_вх_файла>.
+
# Удалить каждую пятую строку
 
+
# Вставить пустую строку и строку с первым символом # перед каждой строкой соответствующей регулярному выражению "regex"
Если входной файл не может быть открыт, либо выходной файл не может быть создан (если задан неправильный путь в командной строке), то вывести соответствующее сообщение об ошибке.
+
# Вставить строку с символом /* после каждой строки соответствующей регулярному выражению "begin"
 
+
# Вставить строку с символом */ после каждой строки соответствующей регулярному выражению "end"  
=== Разворот байт ===
+
# Нумерация каждой 4 строки в файле filename. Используя отступ для отделения номера от строки  
Во входном файле (лог файл) строки с пометкой "(D)" включают данные - четыре DWord (двойное слово - 32 двоичных разряда, далее DW). Например:
+
# Нумерация каждой строки в файле filename (номер слева максимум 9-значный, выравненный по правому краю)  
  0 (D) 80000d00 02000000 00000000 00000000
+
# Нумерация каждой строки в файле filename, с выводом номера только для не пустых строк и каждой с номером кратным 3
Задача развернуть байты в каждом DW`е, как показано ниже
+
# Подсчет строк (эмуляция "wc -l") в файле содержащих выражение "begin"
0 (D) 000d0080 00000002 00000000 00000000
+
# Удалить все пробелы и символы табуляции в начале каждой строки файла  
В файле есть строки с данными со слово "LittleEndian", в которых уже проведено данное преобразование, поэтому их не следует изменять. Например:
+
# Удалить все пробелы и символы табуляции в конце каждой строки файла
0 (D) 8020c011 LittleEndian
+
# Удалить все пробелы и символы табуляции в начале и конце каждой строки файла
Остальные строки из входного файла перенести в выходной без изменений.
+
# Удалить все повторяющиеся пробелы и символы табуляции в начале и конце и в средине каждой строки файла
 
+
# Вставить 3 табуляции в начале каждой строки (создать смещение страницы)
=== Анализ команды ===
+
# Расположить весь текст по правому краю столбца шириной в 80 символов
 
+
# Центрировать весь текст посередине столбца шириной 108 символов.  
Найти в логе данные, которые задают команду и расшифровать её, записав в строке после данных имена и значения полей команды.
+
# Поиск и замена "Hi\bro" на "Yo\bro" в каждой строке
 
+
# Поиск и замена "Hi\bro" на "Yo\bro" (замена только первого совпадения в строке)  
Пакет данных относящийся к команде имеет размер 64 байта, в заголовке пакета должно быть '''BC:0064'''. После строки заголовка следует 4 строки с данными, где в первом столбце - номер DWord`а данных пакета, второй столбец - маркер данных "(D)".
+
# Поиск и замена "Hi\bro" на "Yo\bro" (замена первых 4рех совпадений в строке)  
<small>test_top    203865.00 203869.00 R MRd32      0x0100/01  355  0 0    0 0 0          0x40008080  f f    16 (H) 00008010 010001ff 40008080  ----    0x3191b2b4  0xf87188a                                           
+
# Поиск и замена "Hi\bro" на "Yo\bro" (замена ВСЕХ совпадений в строке)  
test_top    203897.00 203917.00 T CplD      0x0100/01  182  0 0    0 0 0  ID:0xffff Stat:SC  '''BC:0064'''  16 (H) 4a008010 ffff0040 01000100  ----  0 0xa94d0d83 0x37e1b7df                                           
+
# Поиск и замена "Hi\bro" на "Yo\bro" (замена предпоследнего совпадения)  
                                                                                                          0 (D) 01000400 02000000 00000000 00000000                                                                   
+
# Поиск и замена "Hi\bro" на "Yo\bro" (замена только последнего совпадения)  
                                                                                                          4 (D) 00000000 00000000 00900140 00000000                                                                   
+
# Замена "Hi\bro" на "Yo\bro" ТОЛЬКО для строк содержащих "Black"
                                                                                                          8 (D) 00c00140 00000000 0a000000 00000000                                                                   
+
# Замена "Hi\bro" на "Yo\bro" ИСКЛЮЧАЯ строки содержащие "Black"
                                                                                                          12 (D) 01000000 00000000 00000000 00000000                                                                   
+
# Замена "scarlet" или "ruby", или "puce" на "red", или "back" на "white"
</small>
+
# Перевернуть последовательность строк (эмуляция "tac")  
 
+
# Перевернуть каждую строку в файле задом наперед
Данные в логе записываются слева направо - с младшего адреса. В приведённом примере байт 0 нулевого DWord`а равень 01, второй байт - 00, третий 04, четвертый байт - 00 и т.д. Далее идут четыре DWorda данных от младшего к старшему.
+
# Перевернуть каждую слово в файле задом наперед
 
+
# Соединить каждую две (пару) строк бок о бок
Расшифровка команды в [http://www.nvmexpress.org/wp-content/uploads/NVM-Express-1_1.pdf спецификации]
+
# Если линия заканчивается обратной косой чертой "\", то присоединить следующую линию
 
+
# Если линия начинается с знака "==", то присоединить ее к предыдущей линии и заменить "==" пробелом
* Figure 10: Command Dword 0
+
# Добавить запятые к строке из чисел, изменяя "1234567" на "1,234,567"
* Figure 11: Command Dword 0-15: Command Format – Admin Command Set
+
# Добавить символы подчеркивания к строке из чисел, изменяя "ААААFFFFВВВВ1234" на "64'hАААА_FFFF_ВВВВ_1234"
 
+
# Добавить запятые к числу с десятичной частью и знаком минуса 
Например, строка с первыми четырьмя DWord`ами:
+
# Добавить две пустые строки через каждые 5 строк (после строк 5, 10, 15, 20, и т.д.)
0 (D) 01000400 02000000 00000000 00000000
+
# Печатать первые 10 линий файла
должна быть преобразована согласно таблицы 10 и 11 в следующую строку:
+
# Печатать первые 30-100 линий файла
0 (D) 01000400 02000000 00000000 00000000 '''CMD=01, FUSE=00, PSDT=PRP, CID=0004, NSID=2'''
+
# Печатать первую строку файла
 
+
# Печатать последние 20 строк файла
<!-- {|class=standard
+
# Печатать последние 30 строк файла кроме последних 5 строки с конца файла
|Bit
+
# Печатать последнюю строку файла
|Field name
+
# Печатать предпоследнюю строку в файле
|-
+
# Печатать только те строки, которые совпадают с регулярным выражением
| 31:16
+
# Печатать только те строки, которые НЕ совпадают с регулярным выражением
| Command  Identifier  (CID):
+
# Печатать 3 строк непосредственно перед регулярным выражением, но не печатать строку содержащую регулярное выражение
|-
+
# Печатать 5 строк непосредственно после регулярного выражения, но не печатать строку содержащую регулярное выражение
| 15
+
# Печатать по две строки перед и после регулярного выражения, с указанием номера строки совпадающей с регулярным выражением (симуляция "grep -A1 -B1")  
| PRP or SGL for Data Transfer (PSDT): ‘0’ - PRP, ‘1’ - SGL
+
# Печать строк, совпадающих с регулярными выражениями AAA, BBB и CCC одновременно (в любой последовательности)
|-
+
# Печать строк, совпадающих с регулярными выражениями AAA, BBB и CCC одновременно (в конкретной последовательности)  
| 14:10 | Reserved
+
# Печать строк, совпадающих с любым регулярным выражением AAA или BBB, или CCC
|-
+
# Печатать абзац если он содержит AAA (пустая строка разделяет абзацы)
| 09:08 | Fused  Operation  (FUSE)
+
# Печатать абзац если он содержит AAA, BBB и CCC (в любой последовательности) (символ табуляции вначале строки абзацы)
{|
+
# Печатать абзац если он содержит AAA или BBB, или CCC
| Bits | Definition
+
# Печатать строки длиной равной или большей 16 символов
|-
+
# Печатать строки длиной меньше или равной 35 символов
| 00b |Normal operation
+
# Печатать часть файла начиная от совпадения с регулярным выражением и до конца файла
|-
+
# Печатать часть файла основываясь на номерах строк (строки 4-19, включительно)
|01b | Fused operation, first command
+
# Печатать строку под номером 52
|-
+
# Начиная с 3-ей строки печатать каждую седьмую строку в файле
| 10b | Fused opera tion, second command
+
# Печатать часть файла между двумя регулярными выражениями (включительно)  
|-
+
# Печатать все линии ИСКЛЮЧАЯ часть между двумя регулярными выражениями
| 11b | Reserved
+
# Удалить дубликаты последовательных строк в файле. Первая строка в наборе дубликатах строк удерживается от удаления
|}
+
# Удалить дубликаты непоследовательных строк в файле. Остерегайтесь переполнения буфера или используйте GNU sed
|-
+
# Печатать только дубликаты строк
| 07:00 | Opcode (OPC)
+
# Удалить первые 10 строк в файле и одну последнюю
|}
+
# Удалить последнюю строку в файле
-->
+
# Удалить 3 последние строки файла
 +
# Удалить последние 4 строки файла
 +
# Удалить каждую вторую строку в файле
 +
# Удалить каждую вторую строки совпадающие с регулярным выражением
 +
# Удалить ВСЕ пустые строки из файла
 +
# Удалить все последовательности пустых строк из файла исключая первую. Также удалить все пустые строки в начале и в конце файла (эмуляция "cat -s")  
 +
# Оставить последовательность пустых строк не более двух одновременно
 +
# Удалить все пустые строки в начале файла
 +
# Удалить все пустые строки в конце файла
 +
# Удалить последнюю непустую строку в каждом абзаце
 +
# Отсортировать абзацы файла в алфавитном порядке. Абзацы разделены символом табуляции.

Текущая версия на 03:58, 31 марта 2018

Лекции SCRIPT

Лекции

Практические задания
Тесты

Табель успеваемости

Экзамен

Доп. материалы

Перед выполнение ознакомиться с правилами оформления задания

Задания по SED

Задание будет успешно выполнено, если были использованы конструкции языка bash и редактор sed (не допускается использовать другие утилиты кроме SED, допускается помогать при обработке из bash).

  1. Двойное пространство между строками между каждой второй строкой
  2. Тройное пространство между строками исключая пустые строки (на выходе содержатся не больше одной пустой строки между двумя строками с текстом)
  3. Десятерное пространство между каждой 2-ой строкой
  4. Удалить каждую пятую строку
  5. Вставить пустую строку и строку с первым символом # перед каждой строкой соответствующей регулярному выражению "regex"
  6. Вставить строку с символом /* после каждой строки соответствующей регулярному выражению "begin"
  7. Вставить строку с символом */ после каждой строки соответствующей регулярному выражению "end"
  8. Нумерация каждой 4 строки в файле filename. Используя отступ для отделения номера от строки
  9. Нумерация каждой строки в файле filename (номер слева максимум 9-значный, выравненный по правому краю)
  10. Нумерация каждой строки в файле filename, с выводом номера только для не пустых строк и каждой с номером кратным 3
  11. Подсчет строк (эмуляция "wc -l") в файле содержащих выражение "begin"
  12. Удалить все пробелы и символы табуляции в начале каждой строки файла
  13. Удалить все пробелы и символы табуляции в конце каждой строки файла
  14. Удалить все пробелы и символы табуляции в начале и конце каждой строки файла
  15. Удалить все повторяющиеся пробелы и символы табуляции в начале и конце и в средине каждой строки файла
  16. Вставить 3 табуляции в начале каждой строки (создать смещение страницы)
  17. Расположить весь текст по правому краю столбца шириной в 80 символов
  18. Центрировать весь текст посередине столбца шириной 108 символов.
  19. Поиск и замена "Hi\bro" на "Yo\bro" в каждой строке
  20. Поиск и замена "Hi\bro" на "Yo\bro" (замена только первого совпадения в строке)
  21. Поиск и замена "Hi\bro" на "Yo\bro" (замена первых 4рех совпадений в строке)
  22. Поиск и замена "Hi\bro" на "Yo\bro" (замена ВСЕХ совпадений в строке)
  23. Поиск и замена "Hi\bro" на "Yo\bro" (замена предпоследнего совпадения)
  24. Поиск и замена "Hi\bro" на "Yo\bro" (замена только последнего совпадения)
  25. Замена "Hi\bro" на "Yo\bro" ТОЛЬКО для строк содержащих "Black"
  26. Замена "Hi\bro" на "Yo\bro" ИСКЛЮЧАЯ строки содержащие "Black"
  27. Замена "scarlet" или "ruby", или "puce" на "red", или "back" на "white"
  28. Перевернуть последовательность строк (эмуляция "tac")
  29. Перевернуть каждую строку в файле задом наперед
  30. Перевернуть каждую слово в файле задом наперед
  31. Соединить каждую две (пару) строк бок о бок
  32. Если линия заканчивается обратной косой чертой "\", то присоединить следующую линию
  33. Если линия начинается с знака "==", то присоединить ее к предыдущей линии и заменить "==" пробелом
  34. Добавить запятые к строке из чисел, изменяя "1234567" на "1,234,567"
  35. Добавить символы подчеркивания к строке из чисел, изменяя "ААААFFFFВВВВ1234" на "64'hАААА_FFFF_ВВВВ_1234"
  36. Добавить запятые к числу с десятичной частью и знаком минуса
  37. Добавить две пустые строки через каждые 5 строк (после строк 5, 10, 15, 20, и т.д.)
  38. Печатать первые 10 линий файла
  39. Печатать первые 30-100 линий файла
  40. Печатать первую строку файла
  41. Печатать последние 20 строк файла
  42. Печатать последние 30 строк файла кроме последних 5 строки с конца файла
  43. Печатать последнюю строку файла
  44. Печатать предпоследнюю строку в файле
  45. Печатать только те строки, которые совпадают с регулярным выражением
  46. Печатать только те строки, которые НЕ совпадают с регулярным выражением
  47. Печатать 3 строк непосредственно перед регулярным выражением, но не печатать строку содержащую регулярное выражение
  48. Печатать 5 строк непосредственно после регулярного выражения, но не печатать строку содержащую регулярное выражение
  49. Печатать по две строки перед и после регулярного выражения, с указанием номера строки совпадающей с регулярным выражением (симуляция "grep -A1 -B1")
  50. Печать строк, совпадающих с регулярными выражениями AAA, BBB и CCC одновременно (в любой последовательности)
  51. Печать строк, совпадающих с регулярными выражениями AAA, BBB и CCC одновременно (в конкретной последовательности)
  52. Печать строк, совпадающих с любым регулярным выражением AAA или BBB, или CCC
  53. Печатать абзац если он содержит AAA (пустая строка разделяет абзацы)
  54. Печатать абзац если он содержит AAA, BBB и CCC (в любой последовательности) (символ табуляции вначале строки абзацы)
  55. Печатать абзац если он содержит AAA или BBB, или CCC
  56. Печатать строки длиной равной или большей 16 символов
  57. Печатать строки длиной меньше или равной 35 символов
  58. Печатать часть файла начиная от совпадения с регулярным выражением и до конца файла
  59. Печатать часть файла основываясь на номерах строк (строки 4-19, включительно)
  60. Печатать строку под номером 52
  61. Начиная с 3-ей строки печатать каждую седьмую строку в файле
  62. Печатать часть файла между двумя регулярными выражениями (включительно)
  63. Печатать все линии ИСКЛЮЧАЯ часть между двумя регулярными выражениями
  64. Удалить дубликаты последовательных строк в файле. Первая строка в наборе дубликатах строк удерживается от удаления
  65. Удалить дубликаты непоследовательных строк в файле. Остерегайтесь переполнения буфера или используйте GNU sed
  66. Печатать только дубликаты строк
  67. Удалить первые 10 строк в файле и одну последнюю
  68. Удалить последнюю строку в файле
  69. Удалить 3 последние строки файла
  70. Удалить последние 4 строки файла
  71. Удалить каждую вторую строку в файле
  72. Удалить каждую вторую строки совпадающие с регулярным выражением
  73. Удалить ВСЕ пустые строки из файла
  74. Удалить все последовательности пустых строк из файла исключая первую. Также удалить все пустые строки в начале и в конце файла (эмуляция "cat -s")
  75. Оставить последовательность пустых строк не более двух одновременно
  76. Удалить все пустые строки в начале файла
  77. Удалить все пустые строки в конце файла
  78. Удалить последнюю непустую строку в каждом абзаце
  79. Отсортировать абзацы файла в алфавитном порядке. Абзацы разделены символом табуляции.