2015-04-23 162 views
0

仍然卡在这一个。Grep下一行和修改grep

我需要用grep搜索的第一行(ISSN),它应该能够输出0007-9235

<td nowrap valign="top" align="right"><b>ISSN:</b></td> 
<td valign="top"> 0007-9235 </td> 

我已发出ISSN = $(grep的 “ISSN:” $ I - A1)和输出是

<td nowrap valign="top" align="right"><b>ISSN:</b></td> <td valign="top"> 0007-9235 </td> 
<td nowrap valign="top" align="right"><b>ISSN:</b></td> <td valign="top"> 0028-4793 </td> 
<td nowrap valign="top" align="right"><b>ISSN:</b></td> <td valign="top"> 0009-2665 </td> 
<td nowrap valign="top" align="right"><b>ISSN:</b></td> <td valign="top"> 0034-6861 </td> 
<td nowrap valign="top" align="right"><b>ISSN:</b></td> <td valign="top"> 0028-0836 </td> 

我需要它只输出0007-9235,下面的整个列。请帮忙,谢谢!

+0

'一个在'LS RQ = RECORD \&等级= * HTML && b在。 ..'是错误的,将无法正常工作。 – anubhava

+0

你知道如何获得ISSN结果吗? –

回答

1

可以通过管道将您的命令cut

grep -Pzo '<td nowrap align="center" bgcolor="FFFFE1"><p align="center">[^>]*>\K\d+(?:\.\d+)?' $i | 
cut -d ' ' -f1-2 

或者用awk:

grep -Pzo '<td nowrap align="center" bgcolor="FFFFE1"><p align="center">[^>]*>\K\d+(?:\.\d+)?' $i | 
awk '{print $1, $2}' 
+0

这两个命令都显示所有结果。 –

+0

这两个命令都显示所有列 –

+0

您可以显示'grep -Pzo'的输出吗?<\ td nowrap align =“center”bgcolor =“FFFFE1”>

[^>] *> \ K \ d +( ?:\ \ d +)“。? $ i |猫-vte'在你的问题。 – anubhava

0

您可以使用一个基本的状态机awk做的第一件任务:

pax> awk 'e==1{print $3;e=0}/ISSN:/{e=1}' inputFile1 
0007-9235 

归结为使用回声标记e来决定如果下一行应该打印:

e==1 { print $3; 
      e=0 
     } 
/ISSN:/ { e=1 
     } 

第一条规则规定:如果e是一个(它是零的脚本开始之前),打印第三参数(ISSN)然后设置e为零来关闭回波。

第二条规则只是在找到包含ISSN:字符串的行时打开回显,以便在下一行中触发第一条规则。

请记住,这是您提到的非常具体的格式。鉴于标记语言往往是更自由的格式,它可能无法正常工作,如果你的格式改变。在这种情况下,使用某种标记处理解析器可能会更好。

对于第二项任务,awk也是的答案。为了得到前两列,只需使用:

pax> awk '{print $1" "$2}' inputFile2 
162.500 107.740 
54.420 52.426 
45.661 48.832 
42.860 52.577 
42.351 40.783 
41.392 46.174 
39.794 40.274 
39.207 39.315 
39.080 35.620 
37.912 41.706 
37.231 35.436 
36.458 42.584 

虽然在你的情况将是:

<your_current_grep_command> | awk '{print $1" "$2}' 
+0

我得到的部分是您为多个网页触发对方的条件,但发生错误。 issn = $(awk'e == 1 {print $ 3; e = 0}/ISSN:/ {e = 1}'$ i) awk:1:意外字符'&' 鉴于第二部分剂量工作,它仍然显示所有列。 此外,这些数字并不是网页中的唯一数字,它使用来自源代码中不同位置的grep进行采购。 –

+0

@Kin,你需要查看'$ i'中的内容,因为我给出的代码中有_no_'&'。你可能也想检查你有什么,因为你发布的内容在'awk'参数之间没有空格。在第二个问题中,我根据您给出的规范给出了_does_工作的代码,这是一个实际的运行记录(同样也是第一个)。如果规范有更多的信息,那么您应该包括该信息,最好先问问题。 – paxdiablo

+0

$我是一个数字,范围1-30。问题的第二部分,我修正了它。第一部分(Issn)即时通讯仍然试图解决,我想出了issn = $(grep“ISSN:”$ i -A1) –