7

私が使用していた:

cat <<<"${MSG}" > outfile

にメッセージを書き込むことから始めるとoutfile、さらに処理が進みoutfile、awk スクリプトからのメッセージに追加されます。

しかし、今ではプログラムのロジックが変更されているため、最初 outfileにプログラムから行を追加してデータを入力する必要がありますawk(bash スクリプトから外部的に呼び出されます)。 .heredocoutfile

awk スクリプトではなく、bash スクリプト内からそれを行うにはどうすればよいですか?

編集

これはMSGheredocです:

read -r -d '' MSG << EOF
-----------------------------------------------
--   results of processing - $CLIST
--   used THRESHOLD ($THRESHOLD)
-----------------------------------------------
l
EOF
# trick to pertain newline at the end of a message
# see here: http://unix.stackexchange.com/a/20042
MSG=${MSG%l}
4

3 に答える 3

5

コマンド グループを使用します。

{
    echo "$MSG"
    awk '...'
} > outfile

既に存在する場合outfileは、一時ファイルを使用して元のファイルにコピーするしかありません。これは、すべての (?) ファイル システムでファイルがどのように実装されているかによるものです。ストリームの前に追加することはできません。

{
     # You may need to rearrange, depending on how the original
     # outfile is used.
     cat outfile
     echo "$MSG"
     awk '...'
} > outfile.new && mv outfile.new outfile

一緒に使用できるもう 1 つの非 POSIX 機能catは、プロセス置換です。これにより、任意のコマンドの出力が次のファイルのようになりますcat

cat <(echo $MSG) outfile <(awk '...') > outfile.new && mv outfile.new outfile
于 2014-07-08T14:10:10.003 に答える
5

awkファイルの先頭に複数行の文字列を挿入するために使用できます。

awk '1' <(echo "$MSG") file

または、これでも機能するechoはずです:

echo "${MSG}$(<file)" > file
于 2014-07-08T14:12:03.927 に答える