grep/awk 3番目の列には文字列が含まれています。

grep/awk 3番目の列には文字列が含まれています。

文字列の例

blah:blah:example - 1234
blah1:blah2:example2 - 3213

コンテンツが存在することを確認したい。

- 1234

しかし、数字は異なる場合があります

私は使用できることを知っています

awk -F: '$3 ~ / - /' 

「-」があることを確認してください。しかし、数値の可能性を適用する方法は?

答え1

基本的に「-」の後に数字があることを確認したいですか?
したい場合は、このように書くことができます
awk -F: '$3 ~ / - [0-9]+/'


より進化したソリューション

最後の数値に可能な値の配列(たとえば、1、2、3、4、5)がある場合は、次のように書くことができます。

values=(1 2 3 4 5)
awk -v vals="$(echo ${values[@]})" \
'{if(match(vals,$3" ")){print $0}}' input_file.txt

これにより、指定した配列input_file.txtの最後の数字を持つ項目のみが印刷されます。values

答え2

次のコマンドは、最後の2番目のスペースで区切られた列にaを含み、最後のスペースで区切られた列に正の整数を含むすべての行を表示しますawkfile-

awk '$(NF-1) == "-" && $NF ~ /^[0-9]+$/' file

次のgrepコマンドは同じことを行います。

grep -E -e '-[[:space:]]+[0-9]+$' file

パターンの修飾子-Eを理解するために必要であり、パターンの修飾子をコマンドラインオプションとして解釈するのをやめる必要があります(コマンドラインオプションの終わりを示す置換に変更される可能性があります)。+-egrep--e--

関連情報