regex - regular - shell awk string




awk中的多個字段分隔符 (3)

awk的一種方法:

awk -F'[{} ]' '{ for( i=1; i<=NF; i++ ) if( $i ~ /[0-9.]+/ ) print $i }' file

在上面的行中,我們經歷了這些數字,但是我沒有做任何特別的事情,只是把它們打印出來。 你可以把你的邏輯添加到那個部分。

輸出:

0.000
0.000
648.0
0.000
648.0
1980.0
0.000
1980.0
0.000
0.000

我有這個字符串

-foo {{0.000 0.000} {648.0 0.000} {648.0 1980.0} {0.000 1980.0} {0.000 0.000}}

我想分開它的數字和迭代他們,謝謝你試圖使用字段分隔符沒有成功我怎麼能用awk做到這一點?


嘗試這樣做:

awk -F'}+|{+| ' '{for (i=1; i<=NF; i++) if ($i ~ "[0-9]") print $i}' file.txt

字段分隔符FS-F開關)可以是字符,單詞,正則表達式或一類字符。

你也可以使用這個:

awk 'BEGIN{FS="}+|{+| "} {for(i=1;i<=NF;i++) if($i ~ "[0-9]")print $i}' file.txt

說明

  • foo|bar|base是一個正則表達式,它可以匹配由|分隔的任何字符串
  • in }+|{+| ,我們可以選擇匹配至少一個: + ,或文字{至少一個: + ,或空格)。
  • 你也可以使用一類角色來做同樣的事情: [{} ] ,都可以

無可否認,我的奉獻非常簡單。 根據我的經驗,字段分隔符的正則表達式的例子是最有價值的學習,尤其是如果你不得不處理XML等,但在這種情況下,我們必須記住,UNIX面臨的字符是無關緊要的。 一個簡單的解決辦法是只刪除不需要的字符。 有各種方法,但我會使用tr -d '{}'

tr -d '{}' file.txt | awk '{ for( i=2; i<=NF; i++ ) print $i }'

在2開始循環計數器i只是一個快速的方法來跳過第一個參數( -foo





awk