这是两个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'