2012-02-05 92 views
2

一個非常簡單的問題,沒有找到答案。如何在awk中打​​印出特定的字段?如何在AWK中打印出特定的字段?

awk '/word1/',將打印出全文,當我只需要一個word1。或者我需要一系列圖案(word1 + word2)才能從文本中打印出來。

+0

你可以給你的輸入更詳細的例子嗎?你是否試圖複製'grep -o'? – Johnsyweb 2012-02-05 21:26:57

+0

我有一個文字「你好,我的朋友們,你在陽光燦爛的日子過得怎麼樣?」。我搜索/如何/字段的字符串,它被發現和awk用這些匹配的模式打印出整個句子。我不需要那種輸出。我只需要這兩個匹配的單詞。所以我的awk輸入應該是這樣的「怎麼樣」 – user1191129 2012-02-05 21:43:03

+3

聽起來就像'grep -o' :) – Johnsyweb 2012-02-05 22:28:01

回答

2

那麼,如果該模式是一個字(您想打印,不能,容FS(輸入字段分隔符))爲什麼不:

awk -v MYPATTERN="INSERT_YOUR_PATTERN" '$0 ~ MYPATTERN { print MYPATTERN }' INPUTFILE 

如果你的模式是一個正則表達式:

awk -v MYPATTERN="INSERT_YOUR_PATTERN" '$0 ~ MYPATTERN { print gensub(".*(" MYPATTERN ").*","\\1","1",$0) }' INPUTFILE 

如果你的模式,必須在每個SI檢查字段:

awk -v MYPATTERN="INSERT_YOUR_PATTERN" '$0 ~ MYPATTERN { 
    for (i=1;i<=NF;i++) { 
     if ($i ~ MYPATTERN) { print "Field " i " in " NR " row matches: " MYPATTERN } 
    } 
}' INPUTFILE 

修改上述任何一項以符合您的口味。

0

像這樣也許:

awk '{split("bla1 bla2 bla3",a," "); print a[1], a[2], a[3]}' 
+0

不,我需要awk打印只匹配的「word1」。想象一下,我們有一個文本,我需要找到一串文字並打印出來。我不需要整句話,我只需要那個特定的鏈或詞。 – user1191129 2012-02-05 21:15:01

0

在AWK的字段以$ 1,$ 2等代表:

 
$ echo this is a string | awk '{ print $2 }' 
is 

$ 0被整行,$ 1是第一場,$ 2是(或空白), $ NF是最後一個字段,$(NF-1)是第二個到最後一個字段,等等。

你可以嘗試:

 
awk '/crazy/{ print substr($0, match($0, "crazy"), RLENGTH)}' 
+1

我知道)我怎樣才能打印出匹配模式?我有句「你好,瘋狂的世界」。如果找到/瘋狂/我只需要打印出「瘋狂」一詞。 – user1191129 2012-02-05 21:25:56

+0

有沒有一個awk內置變量的「匹配模式」,我想知道? – user1191129 2012-02-05 21:33:45

1

我知道你可以使用awk做到這一點: 替代將是:

sed -nr "s/.*(PATTERN_TO_MATCH).*/\1/p" file 

,或者您可以使用grep -o