特定のフィールドのパターンでawkを使用する方法は?

特定のフィールドのパターンでawkを使用する方法は?

次の行を含むファイルに移動しています。

  1. project: ランダムプロジェクト名
  2. rf1 rf2 rf3 rf4 rf5 rf6 rf7
  3. rv1 rv2 rv3 rv4 rv5 rv6 rv7
  4. その他ランダムライン

どこ

  1. 2.3.そして4.常に次の行の後ろに1.
  2. rv7(任意の値7)はfoo次のいずれかです。bar

例:

project: potatopotato
rf1 rf2 rf3 rf4 rf5 rf6 rf7
rv1 rv2 rv4 rv4 rv5 rv6 rv7
...
THE END

最良のシナリオでは、次のフィールドを使用して.csvを作成したいと思います。

project rf2 rf1 rf7 rf5 rf6

私が今持っているものは次のとおりです。

awk '/foo|bar/{print $2",",$1",",$NF",",$(NF-2)",",$(NF-1)}'

問題は、任意の値が空白の場合、フィールド数が少ないため混乱することです。通常rv6はですNULL。肯定的な側面では、rv5とrv6が次のようにipv4パターンに従うことがわかります。1.1.1.1

だから私の質問は次のようになります

  1. 私が持っているものをどのように変更し、$(NF-2)IP$(NF-1)パターンに従うかを確認して正常にインポートできますか?
  2. awk '/project/{print $2}' 私が望む.csvを作成できるようにどのように組み合わせることができますか?

より良い方法や他の提案があればコメントしてください。ありがとうございます。

ベストアンサー1

$ awk 'NR==2{print p, $2, $1, $7, $5, $6} {sub(/:/,""); p=$1}' file
project rf2 rf1 rf7 rf5 rf6

$ awk -v OFS=',' 'NR==2{print p, $2, $1, $7, $5, $6} {sub(/:/,""); p=$1}' file
project,rf2,rf1,rf7,rf5,rf6

これが必要なものではない場合は、要件を明確にし、より便利で正確な入力/出力の例を提供するように質問を編集してください。

おすすめ記事