一条线只涂两个部分

时间:2017-03-23 10:50:50

标签: bash awk grep

我有以下一行。我可以抓住一部分,但也要努力抓住第二部分。

行:

html:<TR><TD>PICK_1</TD><TD>36.0000</TD><TD>1000000</TD><TD>26965</TD><TD>100000000</TD><TD>97074000</TD><TD>2926000</TD><TD>2.926%</TD><TD>97.074%</TD></TR>

我希望在点击此行后得到以下结果。

PICK_1 97.074%

目前只需通过以下命令点击第一部分。

grep -Po "<TR><TD>[A-Z0-9_]+" test.txt

感谢有关我如何做到这一点的任何帮助。谢谢。

4 个答案:

答案 0 :(得分:2)

将awk与自定义字段分隔符一起使用:

awk -F'[<>TDR/]+' '{ print $2, $(NF-1) }' file

这会在看起来像一个或多个打开或关闭<TD><TR>标签的内容上划分界线,并打印第二个和倒数第二个字段。

警告:除了您显示的输入之外,几乎所有输入都会中断,因为awk,grep和friends是为处理文本而非HTML而设计的。

答案 1 :(得分:1)

如果您总是使用“TD”标记分隔的相同数量的字段,则可以尝试使用此(脏)awk

awk -F'[<TD>|</TD>]' '{print $8 " " $80}'

columnawk的这种组合:

column -t -s "</TD>" | awk -F' ' '{print $3 " " $11}'

或使用sed代替column

sed -e 's/<TD>/ /g' | awk -F' ' '{print $3 " " $11}'

答案 2 :(得分:0)

尝试在&#34; -e&#34;之后提供每个模式。选项

grep -e PICK_1 -e "<TR><TD>[A-Z0-9_]+" test.txt

答案 3 :(得分:0)

awk -F'[<>]' '{print $5,$(NF-4)}' file
PICK_1 97.074%