2012-10-10 67 views
-2

我想在文件中搜索字符串,字符串是dd // mm。我需要計算這些字符串的出現次數。我怎麼能在awk中使用這個字符串。目前我使用這樣的事情,但結果是空的:在文件如何在linux中的awk shell腳本中搜索dd/mm

awk ' /$1/$2/ {i++}END{print i}' filename.text 

樣本內容

09/Oct/2012 filecontentesfilecontetn 
09/OCt/2012 filecontentesfilecontetn 
08/OCt/2012 filecontentesfilecontetn 
+0

您的預期產出到底是什麼? – Steve

+0

我需要WC此字符串09月/ 10月,其結果將是2 – sona

回答

1

假設你的AWK是GNU:

$ awk '/'$1'\/'$2'/{i++}END{print i}' IGNORECASE=1 file 
2 
+0

謝謝,它的工作。 – sona

+0

但ingorecase不工作可以說什麼原因 – sona

+0

IGNORECASE = 1是需要的,因爲你的輸入文件有09/Oct和09/OCt,即一個用c和一個用大寫C.如果你的不是GNU,ignorecase不會工作。 – Guru

0

你嘗試

awk '/dd\/\/mm/ { i++; } END { print i; }' filename.txt 
+0

肯定的,但結果是空 – sona

+1

@sona,那麼請張貼文件的例子內容 –

+0

09月/ 10月/ 2012 filecontentesfilecontetn
09 /月/ 2012 filecontentesfilecontetn
08/OCt/2012 filecontentesfilecontetn
sona

0

如果你正在做的是counti ng,那麼你可以使用grep

$ grep -c '09/Oct' file.txt 

-c選項告訴它計算模式匹配的次數。

但是如果你想TP用awk,你可以從一個shell腳本傳遞字符串,你可以使用一個awk變量,-v

#!/bin/sh 

string="09/Oct" 

awk -v string="$string" '$0 ~ string {i++} END {print i}' file 

如果您還需要匹配小寫的東西(每在你的問題中所示的輸入),你可以將所有內容轉換成一種情況比較之前:

awk -v string="$string" 'BEGIN{string=tolower(string)} tolower($0) ~ string {i++} END {print i}' file 

這應該使用awk的所有版本,而不僅僅是GNU品種(GAWK)工作。

+0

它不工作,字符串沒有匹配 – sona

+0

它爲我做了。請注意,在示例文本的第二行中,字母「C」是大寫字母。你想讓這場比賽不區分大小寫嗎? – Graham

+0

爲您添加了一個不區分大小寫的版本。 – Graham