私は2つの異なるログラインの種類や分野を持っている$5
です:awkの正規表現は、数字の1文字のみの列を返しますか?
ffe5a6fb-2933-4c01-855d-3033933600bf
3
がどのように1つの文字でフィールドだけを抽出するためにawk
で正規表現を書くことができますか?
これは私の解決策ですが、動作していないため、すべてが返されます。
awk '/[0-9]\+/ {print $5}'
私は任意の助けのために理解されるであろうか?
私は2つの異なるログラインの種類や分野を持っている$5
です:awkの正規表現は、数字の1文字のみの列を返しますか?
ffe5a6fb-2933-4c01-855d-3033933600bf
3
がどのように1つの文字でフィールドだけを抽出するためにawk
で正規表現を書くことができますか?
これは私の解決策ですが、動作していないため、すべてが返されます。
awk '/[0-9]\+/ {print $5}'
私は任意の助けのために理解されるであろうか?
それは書くためにわずかに長いですが、あなたの場合のみ、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
の略語を理解しています。
"+"記号をエスケープしないでください。
awk '/[0-9]+/ {print $5}'
の操作を行います。
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
あなたの答えに感謝します。 {1}の組み合わせで数字を探しているときに '\ d'を使わない理由を説明することができますか? –
@MaryamPashmi編集内容を確認する – heemayl
あなたは '$ 5〜/^.$/'という条件を使うことができます。これは、1文字のフィールドと明示的に一致します。 –