如何将grep提取的date与name结果合并生成单张HTML表格?
需求与解决方案
我现在碰到个小问题:我用两条grep语句从指定文件里提取date和name字段,转成HTML表格后得到的是两个独立的表格,但我想要的是每行同时包含对应date和name的单个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>
样本输入
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
预期输出
<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>
解决方案
可以用awk一次性处理输入,精准配对name和date后生成单个表格,既高效又能保证对应关系:
awk '{ # 遍历所有字段,提取配对的name和date for (i=1; i<=NF; i++) { if ($i ~ /^name=/) { sub(/^name=/, "", $i) current_name = $i } else if ($i ~ /^date=/) { sub(/^date=/, "", $i) # 拼接完整日期(日期包含空格,需要往后取所有关联字段) current_date = $i for (j=i+1; j<=NF && $j !~ /^name=/; j++) { current_date = current_date " " $j i = j } # 收集配对好的表格行 table_rows = table_rows "<tr><td>" current_date "</td><td>" current_name "</td></tr>\n" } } } END { # 输出完整的HTML表格结构 print "<html><table border=\"1\">" table_rows "</table></html>" }' /path/to/file
功能说明
- 脚本会逐行扫描目标文件,自动把每个
name和对应的date配对(适配样本输入里name和date成对出现的结构) - 处理日期字段时,会自动拼接所有属于该日期的空格分隔内容,确保日期完整不截断
- 最后一次性输出包含所有配对行的单个HTML表格,完全符合预期效果
内容的提问来源于stack exchange,提问作者aastha
相关产品推荐
相关产品推荐

