awk コマンドのエイリアスを正常に指定すると、OFS は使用されなくなります。

awk コマンドのエイリアスを正常に指定すると、OFS は使用されなくなります。

だから私は最終的に私が望む特定のファイルから情報を取得してgrepするコマンドを取得できるようになり、その後エイリアスの問題が発生しました。

find ./ -type f -name filename.ext  -exec grep 'information' {} + | sort | awk -v OFS='\n' '{print $5, $1, $2, $3 }'

そこで照会後にエイリアスを変更する必要があることがわかったので、次のようにしました。

find ./ -type f -name filename.ext  -exec grep 'information' {} + | sort | awk -v OFS='\n' '{print \$5, \$1, \$2, \$3 }'

これで印刷されますが、まだOFSを使用したいのですが、OFSをロードする構文はわかりません。よろしくお願いします!

 alias aliascommand="find ./ -type f -name filename.ext  -exec grep 'information' {} + | sort | awk -v \OFS='\t' '{print \$5 \$1 \$2 \$3 }'"

上記のバリエーションをエイリアスに入れました。

ベストアンサー1

これにより:

alias foo="...'{print $5 $1 $2 $3 }'"

エイリアスを設定すると、位置パラメータが拡張されます。結局、彼らは二重引用符で囲まれた文字列の中にあります。これをしたくないので、バックスラッシュを使用してエスケープする必要があります。あるいは、エイリアステキスト全体を一重引用符で囲むこともできますが、エイリアス内で一重引用符を使用しようとしているので、これは非常に困難です。

\nしかし、二重引用符の中には大丈夫です。

とにかく、代わりに関数を使用する必要があります。これにより、コマンドへの追加参照を考える必要がなくなります。

mycommand() {
    find ./ -type f -name filename.ext -exec grep 'information' {} + |
       sort |
       awk -v OFS='\n' '{print $5, $1, $2, $3 }'
}

おすすめ記事