2017-07-03 108 views
0

我想使AWK只不匹配以下模式打印線: awk -F'-' 'NF>7'
(線中 - 似乎比7次以上)AWK:只打印線不匹配的定義的模式

有沒有簡單的方法來做到這一點?

非常感謝您

+1

將'!'放在它的前面,或將比較從'>'更改爲'<='。 –

+0

改變比較工作,我沒有想到這一點!謝謝 – bobylapointe

+0

好吧,我發佈它作爲答案。給它幾個小時,看看你是否得到一個更好的,然後看到https://stackoverflow.com/help/someone-answers –

回答

0

如果你不依賴於用awk,grep的GNU可以做到這一點: 代碼:

grep -Ev '<your regex>' 

-v選項意味着不匹配秀行,-E表示使用擴展的正則表達式

+1

這隻適用於正則表達式。 'NF> 7'並不完全是一個正則表達式(儘管你可以用相同的效果編寫正則表達式,但它不會那麼緊湊)。 – rici

0

如何在awk中使用不同的方法。

awk 'gsub(/-/,"-")>=7' Input_file 

說明:全球代與前圍本身儀表板和檢查,如果它的計數大於或等於7這裏,如果是的話,然後打印行。所以awk對條件/動作風格起作用,如果任何條件爲TRUE,那麼動作應該按照前面提到的風格發生,所以這裏沒有提到動作,所以默認打印將發生在當前行或記錄上。我希望這可以幫助你。

+1

與'NF'測試相比,這樣做的效率會非常低,並且您必須考慮到字段分隔符的數量與字段數量(它少一個)不一樣。 –

+1

謝謝埃德,我現在改成> = 7。想想一個不同的方法來嘗試在這裏嘗試幫助用戶。 – RavinderSingh13

2

在其前面貼上!或將比較從>更改爲<=

+0

不是我認爲邏輯否定是寫這個的最好方法,但我想這個建議應該是「堅持一個'!'在它的前面並且在NF> 7'_」周圍添加括號,否則你只是評估'! NF'。 –