2014-02-06 73 views
2

我需要找到一種方法來輸出從一個文件到另一個文件的grep匹配的確切座標。所以說'模式'包含一個匹配的字符串模式列表。 「搜索」是包含文字來搜索基於行的文本(ASCII)文件grep匹配的行和字符串位置

有:

grep -onf patterns search 

我得到的線,在這條線在當前行的匹配,但不是模式模式匹配,這是我需要的。它不限於使用grep,awk等也很好!

你們能幫忙嗎?

在此先感謝!

最佳,

菲爾

+0

此外,使用'grep --color'來突出顯示匹配 – higuaro

+0

這只是顏色的結果,並沒有給我在行中的位置;) –

回答

3

未經測試:

awk 'NR==FNR{strings[$0]; next} {for (string in strings) if ((idx = index($0,string)) > 0) print string, FNR, idx }' file1 file2 

由於您使用-f使用grep我認爲這是你想要的字符串匹配,而不是正則表達式。

上面只是從第一個文件的內容構建一個字符串數組,然後爲第二個文件的每一行尋找每個字符串在那個謊言上出現的位置的索引,並且如果存在,則會打印字符串,行號和字符串首次出現在該行上的索引(起始位置)。

+0

是的只是字符串。哇謝謝!有效!只因爲我真的很感興趣,如果你有空閒時間。你可以解釋它在做什麼?謝謝!! –

+0

添加說明。 –

3

使用awk的,你可以這樣做:

awk -v s="needle" 'i=index($0, s) {print NR, i}' file 

這將打印線#和搜索項的線位置。

UPDATE:

while read -r line; do 
    awk -v s="$line" 'i=index($0, s) {print s ":" NR "," i}' searches 
done < patterns 

或純awk的基礎:

awk 'FNR==NR{a[$0];next} {for (i in a) {if (p=index($0, i)) print i ":" NR "," p} }' patterns searches 
+0

這不會給我任何結果,它應該如何讀取兩個文件?你能解釋你的答案嗎? –

+0

好吧,讓我在幾分鐘內更新2個文件示例的答案。 – anubhava

+0

好的,謝謝!也爲了快速響應! –