Я хочу преобразовать вывод ниже patchhistory.sh сценария оболочки к csv, так, чтобы я мог получить информацию в формате столбца как это:
servername patch history uptime
1.test-tch008.test.com rsyslog Mon 16 Jul 2018 04:36:50 AM EDT 02:18:20 up 953 days, 8:16, 1 user, load average: 0.08, 0.06, 0.08
[root@test-ops002 tmp]# ./patchhistory.sh test-tch008.test.com rsyslog Mon 16 Jul 2018 04:36:50 AM EDT 02:18:20 up 953 days, 8:16, 1 user, load average: 0.08, 0.06, 0.08 Connection to test-tch008 closed. test-twh005.test.com rsyslog Mon 16 Jul 2018 04:37:08 AM EDT 02:18:21 up 1750 days, 13:38, 1 user, load average: 0.07, 0.14, 0.17 Connection to test-twh005 closed. test-vch108.test.com rsyslog Mon 16 Jul 2018 04:38:55 AM EDT 02:18:23 up 94 days, 1:33, 1 user, load average: 0.30, 0.28, 0.27 Connection to test-vch108 closed. test-vch109.test.com rsyslog Mon 16 Jul 2018 04:39:03 AM EDT 02:18:25 up 31 days, 1:22, 1 user, load average: 0.18, 0.10, 0.08 Connection to test-vch109 closed. test-vch110.test.com rsyslog Mon 16 Jul 2018 04:39:58 AM EDT 02:18:26 up 31 days, 1:03, 1 user, load average: 0.14, 0.21, 0.09 Connection to test-vch110 closed. test-vwh114.test.com rsyslog Mon 16 Jul 2018 04:45:18 AM EDT 02:18:28 up 84 days, 5:06, 1 user, load average: 0.22, 0.19, 0.12 Connection to test-vwh114 closed. test-vwh115.test.com rsyslog Mon 16 Jul 2018 04:46:10 AM EDT 02:18:30 up 12 days, 4:27, 1 user, load average: 0.13, 0.16, 0.11 Connection to test-vwh115 closed. test-vwh116.test.com rsyslog Mon 16 Jul 2018 04:46:17 AM EDT 02:18:32 up 84 days, 6:09, 1 user, load average: 0.10, 0.16, 0.23 Connection to test-vwh116 closed. test-vwh117.test.com rsyslog Mon 16 Jul 2018 04:46:26 AM EDT 02:18:33 up 29 days, 14:31, 2 users, load average: 0.32, 0.19, 0.19 Connection to test-vwh117 closed. test-vxh104.test.com rsyslog Mon 16 Jul 2018 04:49:11 AM EDT 02:18:35 up 953 days, 9:02, 2 users, load average: 0.06, 0.03, 0.00 Connection to test-vxh104 closed.
Ну, похож, мы можем сделать это с sed
:)
Это смотрит хорошо мне (продвижение |
я предполагающий, что Вы будете передавать вывод по каналу своего сценария в команду):
| sed -r '/test/ N;N;N; s/(.*)\n([A-Za-z]*)\s*(.*)\n(.*)\n.*/\1 \2 \3 \4/'
test-tch008.test.com rsyslog Mon 16 Jul 2018 04:36:50 AM EDT 02:18:20 up 953 days, 8:16, 1 user, load average: 0.08, 0.06, 0.08
test-twh005.test.com rsyslog Mon 16 Jul 2018 04:37:08 AM EDT 02:18:21 up 1750 days, 13:38, 1 user, load average: 0.07, 0.14, 0.17
test-vch108.test.com rsyslog Mon 16 Jul 2018 04:38:55 AM EDT 02:18:23 up 94 days, 1:33, 1 user, load average: 0.30, 0.28, 0.27
test-vch109.test.com rsyslog Mon 16 Jul 2018 04:39:03 AM EDT 02:18:25 up 31 days, 1:22, 1 user, load average: 0.18, 0.10, 0.08
Но если Вы хотите вставить ту строку заголовка... хорошо я могу только думать об этом ужасном пути...
| sed -r '1 s/^/servername patch history uptime\n/; /test/ N;N;N; s/(.*)\n([A-Za-z]*)\s*(.*)\n(.*)\n.*/\1 \2 \3 \4/'
servername patch history uptime
test-tch008.test.com rsyslog Mon 16 Jul 2018 04:36:50 AM EDT 02:18:20 up 953 days, 8:16, 1 user, load average: 0.08, 0.06, 0.08
test-twh005.test.com rsyslog Mon 16 Jul 2018 04:37:08 AM EDT 02:18:21 up 1750 days, 13:38, 1 user, load average: 0.07, 0.14, 0.17
test-vch108.test.com rsyslog Mon 16 Jul 2018 04:38:55 AM EDT 02:18:23 up 94 days, 1:33, 1 user, load average: 0.30, 0.28, 0.27
test-vch109.test.com rsyslog Mon 16 Jul 2018 04:39:03 AM EDT 02:18:25 up 31 days, 1:22, 1 user, load average: 0.18, 0.10, 0.08
-r
Используйте расширенный regex - сохраняет несколько обратных косых чертs/old/new/
замена old
с new
1 s/^/literally what I want to insert\n/
замените запуск первой строки с Вашей строкой заголовка, заканчивающейся новой строкой. К счастью, sed
интерпретирует \n
как новая строка в этом контексте. /test/
найдите строку с test
N;N;N
считайте следующие три строки в также, таким образом, мы можем использовать \n
в regex и процессе все три строки(.*)
сохраните любое количество любых символов (сохраните целую строку),([A-Za-z])
сохраните набор букв (это rsyslog
, таким образом, Вы могли просто записать rsyslog
если это всегда - то же).\s
горизонтальный пробел\1 \2 \3 \4
Сохраненные шаблоны, с корректным интервалом.