grep -f:打印图案行号

时间:2012-08-15 00:56:01

标签: grep

我正在使用grep -f patternfile inputfile,我想从模式文件中输出行号。例如,如果patternfile

abc
def

inputfile

abcx
abcy
defx

我想要像

这样的东西
1 abcx
1 abcy
2 defx

其中1对应于abcx和abcy与patternfile的第1行匹配的事实,2对应于defx与patternfile的第2行匹配的事实。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

使用awk的一种方法。内容script.awk

FNR == NR {
        pattern[ FNR ] = $1;
        next;
}

FNR < NR {
        if ( FNR == 1 ) {
                l = length( pattern );
        }
        for ( i = 1; i <= l; i++ ) {
                if ( $0 ~ pattern[i] ) {
                        printf "%d %s\n", i, $0;
                        break;
                }
        }
}

像以下一样运行:

awk -f script.awk patternfile inputfile

使用以下输出:

1 abcx
1 abcy
2 defx