我需要找到一种方法将grep匹配的精确坐标从一个文件输出到另一个文件。所以说'patterns'包含要匹配的字符串模式列表。 “搜索”是一个基于行的文本(ascii)文件,其中包含要搜索的文本。
使用:
grep -onf patterns search
我得到了这一行匹配的行和模式,但没有得到模式匹配的行,这就是我需要的。它不仅限于使用grep,awk等也没关系!
你们可以帮忙吗?
提前致谢!
最佳,
菲尔
答案 0 :(得分:3)
使用awk你可以这样做:
awk -v s="needle" 'i=index($0, s) {print NR, i}' file
这将打印搜索项目的行#和行位置。
<强>更新强>
while read -r line; do
awk -v s="$line" 'i=index($0, s) {print s ":" NR "," i}' searches
done < patterns
OR pure awk based:
awk 'FNR==NR{a[$0];next} {for (i in a) {if (p=index($0, i)) print i ":" NR "," p} }' patterns searches
答案 1 :(得分:3)
未测试:
awk 'NR==FNR{strings[$0]; next} {for (string in strings) if ( (idx = index($0,string)) > 0 ) print string, FNR, idx }' file1 file2
由于你在grep中使用-f
我假设它是你要匹配的字符串,而不是正则表达式。
上面只是从第一个文件的内容构建一个字符串数组,然后对于第二个文件的每一行,它查找每个字符串在该谎言上出现的位置的索引,如果存在则打印字符串,该行number和该字符串首次出现在该行的索引(起始位置)。