shell脚本中的内置搜索工具

时间:2015-11-19 08:47:37

标签: shell unix awk

我有一个输入文件" B",包含引用特定的行号 文件中的行" A"。我需要使用该行搜索文本模式 " B"中的数字,例如B的前3行将是:

385
527
547

所以我需要检查"模式"存在于386和526之间, 文件中的528和548" A"。我可以通过一些复杂的编程实现这一点 并在awk等的帮助下循环,但我想知道内置的 Unix(Solaris)中提供的工具和选项,用于搜索,制作我的 代码简单,例如,如果有搜索模式的工具或选项 在给定的行范围之间它将是有用的。

1 个答案:

答案 0 :(得分:0)

awk在范围内匹配(和打印)不需要循环或复杂性:

awk 'NR>start && NR<end && /pattern/'

将文件B内容转换为正确awk条件有点棘手,但这样做:

echo "($(awk 'NR==1{r1=$1;next}
              NR>2{printf"||"}
              {printf"(NR>%d&&NR<%d)",r1,$1;r1=$1}
              END{if(NR<2)printf"0"}' B))&&/yourpattern/"|
  awk -f- A

也许稍微简单一点就是使用sed预先过滤范围,然后grep为模式:

awk 'NR==1{r1=$1;next}
     $1>r1+1{printf"%d,%dp\n",r1+1,$1-1;r1=$1}' B|
  sed -nf- A|
  grep 'yourpattern'