![시간 열의 공백으로 인해 스크립트의 html 파일 형식에 문제가 발생합니다.](https://linux55.com/image/91668/%EC%8B%9C%EA%B0%84%20%EC%97%B4%EC%9D%98%20%EA%B3%B5%EB%B0%B1%EC%9C%BC%EB%A1%9C%20%EC%9D%B8%ED%95%B4%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EC%9D%98%20html%20%ED%8C%8C%EC%9D%BC%20%ED%98%95%EC%8B%9D%EC%97%90%20%EB%AC%B8%EC%A0%9C%EA%B0%80%20%EB%B0%9C%EC%83%9D%ED%95%A9%EB%8B%88%EB%8B%A4..png)
메일 데이터 본문이 표 형식으로 표시되는 자동화된 메일을 만들고 있습니다. 이메일 본문에 어느 정도의 표 형식을 생성하지만 다음 형식을 얻습니다.
---------------------------------------------
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-26
2016-07-26 02:00:00
start_time
2016-07-26 06:00:31
endtime
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
간단한 작은 단계로 인해 많은 작업이 추가됩니다!