ファイルのフィールドを含む文字列を使用して出力を印刷するには?

ファイルのフィールドを含む文字列を使用して出力を印刷するには?

「filename」というファイルで「yellow」という単語を含む行を探しているとしましょう。その後、出力に「シャツの色は黄色です」と表示したいと思います。

「filename」ファイルから抽出した行が次のようになるとします。

blue green orange black purple white yellow pink

私はこのように考えていましたが、それが正しくないことを知っています。

cat filename | grep yellow | awk '{print $7; echo "The colour of the shirt is {$7}}

ベストアンサー1

デフォルトでは、grepを使用した後、1行の出力を取得しました。次に、行の7番目のフィールドを入力し、「シャツの色は「{フィールド7の出力}」と言いたいと思います。

まあ、それはもっと理解できます。

文字列で7番目のフィールドを印刷するには、次のようにします。

awk '{ printf "The color is %s\n", $7 }'

または

awk '{ print "The color is " $7 }'

(引用符で囲まれた文字列との間にはカンマやプラス記号、または何もありません。$7文字列は互いに隣に書くだけでawkで連結されます。)

grepスキップして内部的に同じことを行うこともできますawk

awk '/some regex/ { printf "the seventh field is %s\n", $7 }'

awk で許される正規表現はgrep -E.(微妙な違いがあるかどうか覚えていないので、「ほとんど」) と同じです。ただし、パターンマッチングを特定のフィールドとして指定することもできます。

awk '$3 ~ /regex for field three/ { printf "the seventh field is %s\n", $7 }'

もちろん、一致するすべての行を処理します。愚かな例:

$ awk '$1 ~ /^j/ { printf "the shirt of %s is %s\n", $1, $2 } ' < shirts
the shirt of jimmy is blue
the shirt of joe is red

おすすめ記事