我有一个输入文件" B",包含引用特定的行号 文件中的行" A"。我需要使用该行搜索文本模式 " B"中的数字,例如B的前3行将是:
385
527
547
所以我需要检查"模式"存在于386和526之间,
文件中的528和548" A"。我可以通过一些复杂的编程实现这一点
并在awk
等的帮助下循环,但我想知道内置的
Unix(Solaris)中提供的工具和选项,用于搜索,制作我的
代码简单,例如,如果有搜索模式的工具或选项
在给定的行范围之间它将是有用的。
答案 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'