如何从grep选项卡第二行-A输出

时间:2019-06-25 11:19:29

标签: unix awk sed grep

我正在尝试过滤html文件以仅从文件中获取特定值。该文件是metatrader的html报告,我只想过滤html中的输出值表。

这是html文件(report2.html)的示例

<tr align="right">
   <td nowrap colspan="3">Net profit:</td>
   <td nowrap><b>17.74</b></td>
   <td nowrap colspan="3">Balance Drawdown Absolute:</td>
   <td nowrap><b>0.97</b></td>
   <td nowrap colspan="3">Absolute equity drawdown:</td>
   <td nowrap colspan="2"><b>1.39</b></td>
</tr>
<tr align="right">
   <td nowrap colspan="3">Gross Profit:</td>
   <td nowrap><b>43.91</b></td>
   <td nowrap colspan="3">Balance Drawdown Maximal:</td>
   <td nowrap><b>6.72 (0.07%)</b></td>
   <td nowrap colspan="3">Equity Drawdown Maximal:</td>
   <td nowrap colspan="2"><b>8.02 (0.08%)</b></td>
</tr>
<tr align="right">
   <td nowrap colspan="3">Gross Loss:</td>
   <td nowrap><b>-26.17</b></td>
   <td nowrap colspan="3">Relative balance drawdown:</td>
   <td nowrap><b>0.07% (6.72)</b></td>
   <td nowrap colspan="3">Relative equity drawdown:</td>
   <td nowrap colspan="2"><b>0.08% (8.02)</b></td>
</tr>

如果我使用

grep --no-group-separator -A1 awdown report2.html | sed -n '/^$/!{s/<[^>]*>//g;p;}'

我明白了。

Balance Drawdown Absolute:
0.97
Absolute equity drawdown:
1.39
Balance Drawdown Maximal:
6.72 (0.07%)
Equity Drawdown Maximal:
8.02 (0.08%)
Relative balance drawdown:
0.07% (6.72)
Relative equity drawdown:
0.08% (8.02)

问题是我需要在带有选项卡的第一行之后紧跟第二行,我不知道如何制作它,并且还需要在第一个选项卡中具有文件名。

预期输出是这样的:

report2.html    Balance Drawdown Absolute:  0.97
report2.html    Absolute equity drawdown:   1.39
report2.html    Balance Drawdown Maximal:   6.72 (0.07%)
report2.html    Equity Drawdown Maximal:    8.02 (0.08%)
report2.html    Relative balance drawdown:  0.07% (6.72)
report2.html    Relative equity drawdown:   0.08% (8.02)

任何人都可以帮助我如何实现此输出?

谢谢

2 个答案:

答案 0 :(得分:0)

请尝试以下操作:

grep --no-group-separator -A1 awdown report2.html | sed -n '/^$/!{s/<[^>]*>//g;p;}' | sed '$!N;s/\n//'

我只是在您的命令之后添加了另一个流编辑命令

答案 1 :(得分:0)

另一种选择。

 grep --no-group-separator -A1 awdown report2.html | sed -n '/^$/!{s/<[^>]*>//g;p;}' | awk 'NR%2{printf "%s ",$0;next;}1'