LINUX.ORG.RU
ФорумJob

Нужна помощь по написанию скрипта

 , ,


1

1

Нужно написать bash-скрипт

Имя, Фамилия, Телефон, электронная почта — телефонная книжка в формате csv. Преобразовать в валидный html, который можно просматривать в браузере. Пользоваться можно только sed.

Пример входного файла: Имя,Фамилия,Телефон,Почта’/n’ Петр,Иванов,1234567,petya@mail.ru ‘/n’ Иван,Петров,7654321,ivan@gmail.com ‘/n’

(Через ‘/n’ обозначаю перенос строки)

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

Пример входного файла

Ещё бы пример выходного файла добавить, прям олимпиадная задача получится.

eve ()

Пользоваться можно только sed.

Это типа, как головоломка из журнала? :)

Oleg_Iu ()

Нужно, чтобы на адрес электронной почты можно было кликнуть, и при этом браузер должен понять, что мы хотим написать этому человеку письмо

Сделаю эту лабораторку за 2000 р.

anonymous_sapiens ★★★★ ()

Пользоваться можно только sed.

Почему? Или ты очередной нерадивый студент, что сваливает на форум свои упражнения?

Vsevolod-linuxoid ★★★★★ ()
Ответ на: комментарий от Vsevolod-linuxoid

Или ты очередной нерадивый студент, что сваливает на форум свои упражнения?

Это же очевидно.

Meyer ★★★★ ()

Это очень сложная задача, потому что валидный e-mail может выглядеть очень, очень странно.

anarquista ★★★★★ ()
Ответ на: комментарий от anarquista

Это очень сложная задача, потому что валидный e-mail может выглядеть очень, очень странно.

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

Manhunt ★★★★★ ()
Ответ на: комментарий от Manhunt

файл является валидным csv. То есть запятые и переносы строк являются частью csv-разметки, и по этой причине входить в состав email-адреса они не могут.

id,email
0,"qwe,rt@domain"
1,"asd
123@domain"

Это валидный csv с двумя записями.

cloun1902 ()

Пользоваться можно только sed.

А echo и cat можно?

ya-betmen ★★★★★ ()
Ответ на: комментарий от cloun1902

Ты выбрал более сложный вариант синтаксиса csv (в котором кавычки также являются частью csv-разметки), но в любом случае благодаря cvs заниматься разбором синтаксиса email-адресов (что является сложной задачей) - не требуется.

Manhunt ★★★★★ ()
Ответ на: комментарий от Manhunt

благодаря cvs заниматься разбором синтаксиса email-адресов (что является сложной задачей) - не требуется

В такой формулировке да, всё верно.

cloun1902 ()

Держи, лодырь

#!/bin/bash

sed 's|^|a.push("|' "$1" | sed 's|$|");|' | sed '1i<script>' | sed '2ivar a=[];' | sed '' | sed '$a</script>' | sed "1i<html>\n<body>" | sed 's|<script>|<script type= text/javascript>|' | sed 's|<body>|<head>|' | sed 's|var a|window.a|' | sed 's|</script>|function init(){window.s="<table>";for(i in a) {if(a[i].trim()==""){continue}s+="<tr>";var c=a[i].split(",");for(j in c){s+=(i<1?"<th>":"<td>")+c[j]}};document.getElementsByTagName("body")[0].innerHTML=s;}|' | sed '$a</script>\n</head>' | sed '$a<body onload="init()">\n</body>\n</html>' > "$2"

Кладешь в файлик script.sh, запускаешь script.sh input.csv output.html

ya-betmen ★★★★★ ()
Последнее исправление: ya-betmen (всего исправлений: 1)
Ответ на: комментарий от Manhunt
#!/bin/bash

sed 's|^|a.push("|' "$1" | sed 's|$|");|' | sed '1i<script>' | sed '2ivar a=[];' | sed '' | sed '$a</script>' | sed "1i<html>\n<body>" | sed 's|<script>|<script type= text/javascript>|' | sed 's|<body>|<head>|' | sed 's|var a|window.a|' | sed 's|</script>|function init(){window.s="<table>";for(i in a) {if(a[i].trim()==""){continue}s+="<tr>";var c=a[i].split(",");for(j in c){s+=(i<1?"<th>":"<td>")+c[j]}};document.getElementsByTagName("body")[0].innerHTML=s;}|' | sed '$a</script>\n</head>' | sed '$a<body onload="init()">\n</body>\n</html>' | sed 's|innerHTML=s;}|innerHTML=s;var l=document.getElementsByTagName("td");for(var k=0;k<l.length;k++){l.item(k).addEventListener("click",function(){if(this.innerText.indexOf("@")>0){alert("You want to send message to " + this.innerText)}})}};|' > "$2"

Пофиксил, cast anton_kuznetsov

ya-betmen ★★★★★ ()
Ограничение на отправку комментариев: только для зарегистрированных пользователей, score>=0