시간 열의 공백으로 인해 스크립트의 html 파일 형식에 문제가 발생합니다.

시간 열의 공백으로 인해 스크립트의 html 파일 형식에 문제가 발생합니다.

메일 데이터 본문이 표 형식으로 표시되는 자동화된 메일을 만들고 있습니다. 이메일 본문에 어느 정도의 표 형식을 생성하지만 다음 형식을 얻습니다.

---------------------------------------------
j-id|start-time|End-time|
abc|2016-07-26|02:00:00|2016-07-26|06:00:31|
---------------------------------------------

하지만 다음과 같아야 합니다.

---------------------------------------------
j-id|start-time|End-time|
abc|2016-07-26 02:00:00|2016-07-26 06:00:31|
---------------------------------------------

여기서는 is 및 is 때문에 |이후에 제거했습니다 .2016-07-262016-07-26 02:00:00start_time2016-07-26 06:00:31endtime

mysql DB에서 데이터를 쿼리 중이므로 시작 시간/종료 시간 형식을 변경할 수 없으며 출력을 Excel 파일로 리디렉션한 다음 html 형식으로 변환하여 메일을 통해 보낼 수 있습니다. 예상되는 형식 출력을 얻을 수 있도록 도와주실 수 있나요?

내 코드는 다음과 같습니다.

awk 'BEGIN{
FS=","
}
 {
printf "<TR>"
for(i=1;i<=NF;i++)
printf "<TD>%s</TD>", $i
print "</TR>"
 }
END{
print "</TABLE></BODY></HTML>"
 }
' status.csv > status.html
(

echo "From:abc "

echo "Subject: testing of html table using"
echo "Content-type: text/html"
echo
awk  'BEGIN{print "<table border="1">"} {print "<tr>";for(i=1;i<=NF;i++)print "<td>" $i"</td>";print  "</tr>"} END{print "</table>"}'  status.html

) | sendmail [email protected] text

상태.csv

st,2016-07-28 02:00:00,2016-07-28 08:10:18,06:10:18
evergreen,2016-07-28 08:10:32,2016-07-28 09:13:00,01:02:28
Discount,2016-07-28 09:00:00,2016-07-28 19:11:07,10:11:07
GO,2016-07-28 09:00:00,2016-07-28 15:33:04,06:33:04
BF,2016-07-28 09:30:38,2016-07-28 23:43:32,14:12:54

답변1

실제로 가지고 있는 CSV 파일에 추가 헤더 행이 있다고 가정합니다. 그렇지 않은 경우 쉽게 줄을 추가하여 echo제목을 추가할 수 있습니다.

CSV에 추가 데이터 열이 있는 것으로 확인되었습니다. 기간처럼 보입니다.

기간을 유지하려면 다음과 같이 간단합니다.

(
  echo "From: abc"
  echo "Subject: testing of html table using"
  echo "Content-type: text/html"
  echo
  echo '<table border="1">'
  sed -e 's!^!<tr><td>!' -e 's!$!</td></tr>!' -e 's!,!</td><td>!g' status.csv
  echo '<table>'
) | sendmail ...

CSV의 각 행은 다음과 유사한 것으로 변환됩니다.

<tr><td>BF</td><td>2016-07-28 09:30:38</td><td>2016-07-28 23:43:32</td><td>14:12:54</td></tr>

출력의 마지막 열을 원하지 않으면 줄을 변경하여 sed제거할 수 있습니다.

sed  -e 's!,[^,]*$!!' -e 's!^!<tr><td>!' -e 's!$!</td></tr>!' -e 's!,!</td><td>!g' status.csv

지금 같은 줄

<tr><td>BF</td><td>2016-07-28 09:30:38</td><td>2016-07-28 23:43:32</td></tr>

,두 경우 모두 시간과 날짜 사이에 아무 것도 없기 때문에 동일한 <td>... </td>데이터 요소에 보관합니다.

다음을 추가하도록 편집되었습니다.

sed를 구성 요소 부분으로 나누어 보겠습니다.

첫 번째

s!,[^,]*$!!

이렇게 하면 마지막 쉼표부터 줄 끝까지 모든 내용이 제거됩니다. 본질적으로 "기간" 필드 제거

다음

s!^!<tr><td>!

이렇게 하면 각 행이 <tr><td>기본적으로 새 테이블 행과 새 데이터 요소로 시작됩니다.

그 다음에

s!$!</td></tr>!

이렇게 하면 데이터 요소가 끝나고 테이블 행이 각 행의 끝에서 끝나게 됩니다.

이 시점에서 다음과 같은 라인이 생겼고 <tr><td>csv,file,data</td><tr>, 모든 것을 간단히 다음 ,과 같이 변환할 수 있습니다.</td><tr>

s!,!</td><td>!g

간단한 작은 단계로 인해 많은 작업이 추가됩니다!

관련 정보