パイプで接続された複数のawkコマンドを単一のawkコマンドに結合する方法

パイプで接続された複数のawkコマンドを単一のawkコマンドに結合する方法

以下を含むファイルをフィルタリングするスクリプトを作成しています。

a:10
b:20
c:60
# comment
{{# random mustache templating}}
d=4
e=6

結果の出力は次のとおりです。

a
b
c
d
e

これは私の命令です。

cat filename.txt | awk '{$1=$1;print}' | awk -F'{{' '{print $1}' | awk -F'=' '{print $1}' | awk -F':' '{print $1}' | awk -F'#' '{print $1}' | awk /./

目的:

  • 「=」または「:」文字が表示される行のすべての項目を削除します。
  • テンプレートを削除するには、「{{」で始まる行を削除してください。
  • 各行の先頭と末尾のスペースを切り捨てます。
  • 空白行をすべて削除します。

私はbashを初めて使用するのにどのようにこのコマンドを短くすることができますか?

ベストアンサー1

フィールド区切り文字は完全な正規表現である可能性があるため

awk -F'[:#=]' '!/^{{/ && length($1) > 0 { split($1, a, " "); print a[1] }' filename.txt

十分です。 ":"、"#"、"="のいずれかが区切り文字として機能します。 「{{」で始まる行を除いて、$1空でない行を一致させ、$1空白に分割し、最初の結果フィールドを印刷します。

おすすめ記事