如何从grep结果生成类似html表的结果



这是两个grep语句,我正在使用它们从路径中grep日期和名称,然后将输出转换为html表格式。你们能帮我得到想要的输出吗。

grep 'date' /path/to/file | cut -d "=" -f2-7 | cut -d " " -f2-7 | sed -e 's~.*=(.*)~<tr><td>1</td></tr>~;1i<html><table border="1">' -e '$a</table>n</html>';

grep 'name' path/to/file | cut -d " " -f1 | sed -e 's~.*=(.*)~<tr><td>1</td></tr>~;1i<html><table border="1">' -e '$a</table>n</html>';

我得到的输出:

<html>
<table border ="1">
<tr><td>Sun Sep 18 23:08:20 PDT 2022</td></tr>
<tr><td>Sun Sep 18 23:15:50 PDT 2022</td></tr>
<tr><td>Sun Sep 18 23:49:08 PDT 2022</td></tr>
</table>
</html>
<html>
<table  border ="1">
<tr><td>aastha</td></tr>
<tr><td>anukriti</td></tr>
<tr><td>aakriti</td></tr>
</table>
</html>

期望输出:

<html><table border="1">
<tr><td>Wed Sep 15 13:27:03 PDT 2021</td><td>aastha</td></tr>
<tr><td>Wed Sep 15 14:36:11 PDT 2021</td><td>kiyo</td></tr>
<tr><td>Wed Sep 15 21:13:12 PDT 2021</td><td>amisha</td></tr>
<tr><td>Thu Sep 16 06:31:22 PDT 2021</td><td>anukriti</td></tr>
<tr><td>Thu Sep 16 09:36:32 PDT 2021</td><td>aakriti</td></tr>
<tr><td>Thu Sep 16 09:39:09 PDT 2021</td><td>harni</td></tr>
<tr><td>Sun Sep 18 23:15:50 PDT 2022</td><td>harshu</td></tr>
</table>
</html>

样本输入:

name=aastha date=Sun Sep 18 23:49:08 PDT 2022
name=anukriti date=Sun Sep 18 23:15:50 PDT 2022
name=aakriti date=Sun Sep 18 23:08:20 PDT 2022

使用sed

$ sed -Ee '1i<html><table border="1">' -e 's~^name=([^ ]*)[^=]*=(.*)~<tr><td>2</td><td>1</td></tr>~;${a</table>n</html>' -e '}' input_file
$ cat script.sed
1i<html><table border="1">
s~^name=([^ ]*)[^=]*=(.*)~<tr><td>2</td><td>1</td></tr>~
$ { 
a</table>n</html>
}
$ sed -Ef script.sed input_file
<html><table border="1">
<tr><td>Sun Sep 18 23:49:08 PDT 2022</td><td>aastha</td></tr>
<tr><td>Sun Sep 18 23:15:50 PDT 2022</td><td>anukriti</td></tr>
<tr><td>Sun Sep 18 23:08:20 PDT 2022</td><td>aakriti</td></tr>
</table>
</html>

使用您显示的示例,请尝试以下单个awk代码。我们不需要为这项任务使用太多工具,这段代码将帮助您在未来维护它,因为它是用单一语言完成的。

awk -v FS='name=| date=' '
BEGIN{
print "<html><table border="1">"
}
{
print "<tr><td>" $NF "</td><td>" $2 "</td></tr>"
}
END{
print "</table>n</html>"
}
' Input_file

同一行形式的上述代码如下:

awk -v FS='name=| date=' 'BEGIN{print "<html><table border="1">"} {print "<tr><td>" $NF "</td><td>" $2 "</td></tr>"} END{print "</table>n</html>"}' Input_file

sed命令中删除<html><table>标记。

运行第一个命令并将其输出到dates.txt。它应该只将<tr>标记放在每个结果行的开头。

运行第二个命令并将其输出到names.txt。它应该将</tr>标记放在每个结果行的末尾。

然后使用paste将它们并排连接。使用简单的printf语句在其周围添加<html><table>标签。

grep 'date' /path/to/file | cut -d "=" -f2-7 | cut -d " " -f2-7 | sed 's~.*=(.*)~<tr><td>1</td>~' > dates.txt
grep 'name' path/to/file | cut -d " " -f1 | sed 's~.*=(.*)~<td>1</td></tr>~' > names.txt
printf '<html>n<table border="1">n'
paste dates.txt names.txt
printf '</table>n</html>n'

相关内容

  • 没有找到相关文章