正確な文字列一致

正確な文字列一致

AWS cliを使用してAWSアカウントからいくつかのデータを取得しています。正確な文字列を抽出できません。次のコマンドを実行するとき:-

aws ec2 describe-instances --output text --query 'Reservations[*].Instances[*].[ [Tags[?Key==`Name`].Value] [0][0], [Tags[?Key==`Operating System`].Value] [0][0], [Tags[?Key==`Environment`].Value] [0][0], InstanceId, InstanceType,VpcId, State.Name, PrivateIpAddress, PublicIpAddress]
'| column -t | grep production

私が得た結果は次のとおりです。

 sftp_gateway_instance        rhel     production  i-0aec9xxxxxxxxxxxd  t2.xlarge   vpc-zzzzzz1b  running  2.3.4.5    3.2.1.2
 abc-production-nav-1         rhel     production  i-0e4xxxxxxxxxxxxx3  t2.xlarge   vpc-zzzzzz1b  running  1.1.6.5    None
 xyz-produ-nav                rhel     production  i-0xxxxxxxxxxxxxx18  t2.xlarge   vpc-zzzzzz1b  running  2.8.0.4    None
 solutions-production-navi    centos   uat         i-08fffffffffff86c8  t2.large    vpc-zzzzzz1b  running  2.8.9.2    None

上記の出力では、本番環境は環境列ではなくインスタンス名に記載されているため、最後の行は必要ありません。

以下のawkコマンドを試しましたが、この場合、出力は正しい列形式で表示されません。

aws ec2 describe-instances --output text --query 'Reservations[*].Instances[*].[ [Tags[?Key==`Name`].Value] [0][0], [Tags[?Key==`Operating System`].Value] [0][0], [Tags[?Key==`Environment`].Value] [0][0], InstanceId, InstanceType,VpcId, State.Name, PrivateIpAddress, PublicIpAddress]
'| awk -F ' ' '$3 == "production" {print $1 "\t\t" $2 "\t" $3"\t" $4"\t" $5"\t" $6"\t" $7"\t" $8"\t" $9 }' 

この場合の出力は次のようになります。

abc-production  centos  production  i-xyzabcdef t2.xlarge   vpc-xyzabc  running 2.18.1.0    None
doc-pdf-prod windows production i-xyzabcdef t2.large    vpc-xyzabc  running 172.18.70.229   None

上記のように、正しい列形式の出力が必要です。 grepを使用して得られた結果です。誰でもこれについて何をすべきかを提案できますか?

ベストアンサー1

grep production「Production」を含む行を一致させるのではなく、awk '$3 == "production"'3番目のフィールドが「Production」の行のみを一致させるを使用してください。

:では追加の作業は必要ありませんawk。デフォルトでは、一致する行全体が印刷されます。

おすすめ記事