2017-09-24 179 views
-2

我想在awk命令,在這個正則表達式應該是一個變量使用正則表達式,我可以調用awk命令使用由正則表達式變量

實例之前進行更改: gawk 'BEGIN{RS=ORS="\n\n" {s=tolower($0)} s~/word1|word2/' file1.log

這個工作對我來說,這個命令顯示所有行包含最後的「新行」到下一個「新行」

我想要做的就是words1或字詞2,把字詞1和字詞2在變量中,在gawk中使用它

例如:

正則表達式=「字詞1 |單詞2」 gawk 'BEGIN{RS=ORS="\n\n" {s=tolower($0)} s~/$regex/' file1.log

其中正則表達式可以改變取決於我的程序 我搜索並嘗試了多種解決方案,但沒有工作對我來說

解決方案我嘗試過:

1)regex =「word1 | word2」; gawk 'BEGIN{RS=ORS="\n\n" {s=tolower($0)} s~/$regex/' file1.log

2)的正則表達式= 「字詞1 | WORD2」 gawk -v pat="$regex" 'BEGIN{RS=ORS="\n\n" {s=tolower($0)} s~/pat/' file1.log

3)的正則表達式= 「字詞1 | WORD2」 gawk 'BEGIN{RS=ORS="\n\n" {s=tolower($0)} {pat=$regex} s~/pat/' file1.log

4)的正則表達式= 「字詞1 | WORD2」 echo $regex | gawk 'BEGIN{RS=ORS="\n\n" {s=tolower($0)} s~/$1/' file1.log

提前致謝!

回答

3

你能否請嘗試以下並讓我知道這是否有助於你。

如果你想把這兩個字符串都保存爲一個變量,並且想在awk中作爲正則表達式使用,那麼以下內容也可能對你有幫助。

regex='word1|word2' 
awk -v reg="$regex" 'tolower($0) ~ reg' Input_file 

這裏有幾點太:

I-由於您沒有提供INPUT_FILE樣本所以無法測試,但我的直覺是,它應該工作的任何數據。

II-那麼你已經在awk BEGIN節,因爲默認情況下本身就被設置爲新的生產線,所以你可能會刪除部分來自代碼冗餘提到RSORS\n

+0

嗨,這工作,但我想用1個變量,我可以在awk命令之前配置,因爲它可能會在下一次迭代word1,word2,word3和word4 –

+0

檢查我的編輯一次,我已經添加了變量從shell到awk,其中可能有多個字符串。讓我知道這是否有助於你。 – RavinderSingh13

+1

工作!謝謝! –

0

如果你想輸入它作爲一個複合表達式,你也可以做這一塊我想:

awk -v pat="$regex" '{split(regex, a, "|")}tolower($0) ~ a[1] || tolower($0) ~ a[2]' 

假設你的正則表達式輸入:regex="word1|word2"

+0

awk將RS和ORS的值賦值給新行,所以我們不需要在BEGIN節中設置。 – RavinderSingh13

+0

Thx爲提示:) – JFS31