awkとfindを使用したマルチファイルリダイレクト

awkとfindを使用したマルチファイルリダイレクト

私のディレクトリにいくつかのファイルがあります。 .dllを使用してファイルの上部と末尾にいくつかの行を追加したいと思いますawk

例: 私のawkコマンド:

awk 'BEGIN { print "line1\nline2" } { print $0 } END { print "line3\nline4" }' file |tee file

line1上記のコマンドを使用すると、上部&末尾に&を追加できます。line2line3line4file

今、ディレクトリにあるすべてのファイルに対して同じことをしたいと思います。

私が使用している場合:

awk 'BEGIN { print "line1\nline2" } { print $0 } END { print "line3\nline4" }' *

すると端末画面に出力が表示されますが、すべてのファイルにリダイレクトまたは上書きすることはできません。

だから私は次を試しました(To find+ awk)。

find -type f -exec awk 'BEGIN { print "line1\nline2" } { print $0 } END { print "line3\nline4" }' '{}' \;

上記のコマンドを使用して、画面に出力を印刷できます。ファイルの上書き

以下を試しましたが(でfind++awk上書きtee)、エラーが発生しました。

$ find -type f -exec awk 'BEGIN { print "line1\nline2" } { print $0 } END { print "line3\nline4" }' '{}' | tee '{}' \;
find: missing argument to `-exec'

では、どのように使用しますか?awk到着書く(例:AND|teeなど)すべてのファイルについてコマンドを介して現在のディレクトリにありますか?

ベストアンサー1

awkGNU 4.1以降の使用:

find . -type f -exec awk '
   @load "inplace"
   BEGINFILE {
     inplace_begin(FILENAME, "")
     print "line1\nline2"
   }
   {print}
   ENDFILE {
     print "line3\nline4"
     inplace_end(FILENAME, "")
   }' {} +

おすすめ記事