2015-04-02 35 views
-2

我需要在純文本文件(無分隔符或列)中查找最後一次出現的字符串,並將其行號和整行保存在變量中以供以後使用我的腳本使用awk查找並保存最後一次出現的字符串

然後我需要檢查是否有一個第二個字符串發生在我們剛剛找到的行之後。

我不確定如何做到這一點,我是bash磨砂膏。我不知道如何在變量中保存awk的結果,而且我不確定我需要找到最後一次出現的字符串的邏輯。任何意見/指導將是驚人的

+2

你能舉一個輸入和輸出的例子嗎? – 2015-04-02 19:11:01

+3

聽起來好像你正在嘗試在shell中編寫一個腳本,而應該完全用awk編寫腳本。 shell是一個可以調用工具的環境,而不是操縱文本的工具 - 這是awk的工作。發佈示例輸入文件,預期輸出,以及迄今爲止所做的工作。 – 2015-04-02 19:18:22

回答

1
# Remember last line on which we saw "string_to_match", and the line itself 
/string_to_match/ { last1 = NR; line=$0 } 
# Remember last line on which we saw "second_string" 
/second_string/ { last2 = NR } 
# At the end of the file, if last2 was after last1, print it. 
END { if (last2 > last1) print last2 } 

基本上只是處理反過來每次找到第一個更新last1line變量時各條線和。

同樣,每次看到第一個字符串更新last2變量。

當您到達文件末尾last1將是您看到第一個字符串的最後一行。在這一點上,你可以看到第二個字符串是否在該點之後被看到。您還可以使用last1line進行所需的任何處理。

+2

OP表示字符串,而不是RE,所以它會是'index($ 0,「string_to_match」)',而不是'/ string_to_match /'等。 – 2015-04-02 19:20:14

+0

好吧,我有這個到目前爲止。我假設它可以在一個awk awk索引($ 0,「string1」){last1 = NR; line = $ 0} index($ 0,「string2」){last2 = NR} END {if(last1> last2)print last1:$ last1}'inputFile'。有沒有辦法將last1和$ last1輸出到變量中?我想在一個shell腳本中做這件事,我可以在awk – Gus 2015-04-02 19:33:09

+1

之後做一些其他的事情,但是關鍵是你幾乎肯定會用這種完全錯誤的方式去嘗試在單個內線shell腳本,而不是簡單地寫一個更簡單,更清晰,簡潔的awk腳本。 – 2015-04-02 19:43:24

相關問題