2016-05-02 2 views
0

私は2つの異なるログラインの種類や分野を持っている$5です:awkの正規表現は、数字の1文字のみの列を返しますか?

ffe5a6fb-2933-4c01-855d-3033933600bf 
3 

がどのように1つの文字でフィールドだけを抽出するためにawkで正規表現を書くことができますか?

これは私の解決策ですが、動作していないため、すべてが返されます。

awk '/[0-9]\+/ {print $5}'

私は任意の助けのために理解されるであろうか?

+0

あなたは '$ 5〜/^.$/'という条件を使うことができます。これは、1文字のフィールドと明示的に一致します。 –

答えて

1

それは書くためにわずかに長いですが、あなたの場合のみ、C

awk '$5~/^.$/ {print $5}' file.txt 

だけの数字に一致するようにフィールドの長さについては、私はlengthを使用することが明確だと思う:

awk 'length($5) == 1 { print $5 }' file 

そうでない場合、あなたは9の範囲0で単一の文字を一致させたい場合は、それは次のようになります。

awk '$5 ~ /^[0-9]$/ { print $5 }' file 

...またはあなたのロケールの数字であると考えられて何もマッチする:AWKの

awk '$5 ~ /^[[:digit:]]$/ { print $5 }' file 

一部のバージョン(例えばGNU awk)は、[[:digit:]]ではなく、\dの略語を理解しています。

0

"+"記号をエスケープしないでください。

awk '/[0-9]+/ {print $5}' 
2

の操作を行います。

awk '$5~/^[0-9]$/ {print $5}' file.txt 

例:

$ cat file.txt 
abcdX1yad45das ffe5a6fb-2933-4c01-855d-3033933600bf ffe5a6fb-2933-4c01-855d-3033933600bf ffe5a6fb-2933-4c01-855d-3033933600bf ffe5a6fb-2933-4c01-855d-3033933600bf 3 foo 
abcdX1yad45das ffe5a6fb-2933-4c01-855d-3033933600bf ffe5a6fb-2933-4c01-855d-3033933600bf ffe5a6fb-2933-4c01-855d-3033933600bf 3 foo 
abcdX2fad45das 
abcdX3had45das 
abcdX4wad45das 
abcdX5mad45das 

$ awk '$5~/^.$/ {print $5}' file.txt 
3 
+0

あなたの答えに感謝します。 {1}の組み合わせで数字を探しているときに '\ d'を使わない理由を説明することができますか? –

+0

@MaryamPashmi編集内容を確認する – heemayl

関連する問題