これは間違っています:
for f in a*.dat; do
awk '.....' file1 "$f" > temp
awk '.....' temp > "$f_out"
done
a*.datを入力として使用し、接尾辞_outを使用して出力として使用したいと思います。非常にありがとう
答え1
は_
変数名の一部と見なされるため、追加のf_out
代わりにその変数を使用します。使用すると問題が解決します。f
out
{}
for f in a*.dat; do
awk '.....' "$f" > "${f}_out"
done
答え2
$f
変数を文字列の残りの部分と区別するには、中かっこを使用する必要があります(_out
)。つまり、
$f_out
名前付き変数f_out
(存在しない可能性があるため空の文字列として評価されます)を参照し、関連付けられた${f}_out
変数の値を表します。f
_out
awkスクリプトが何をするかに応じて、おそらく(ほぼ確実に)2回実行する必要はありません。次のように、あるスクリプトの出力を別のスクリプトにパイピングすることは
awk
ほとんど役に立ちません。awk
awk
awk '.....' file1 "$f" > temp awk '.....' temp > "${f}_out"
実際には次のようになります。
awk '.....' file1 "$f" | awk '.....' > "${f}_out"
次のように書くことをお勧めします。
awk '{....}; {.....}' "$f" > "${f}_out"
ループで:
for f in *.dat; do awk '{....}; {.....}' "$f" > "${f}_out" done
ところで、awk
現在処理中のファイルのファイル名と同じ「FILENAME」という組み込み変数があります。つまり、ループが必要ない場合がありますfor
。以下を実行してください。
awk '{....}; { .... }; { print > FILENAME "_out" }' a*.dat
または、すべてのprintステートメントがで終わっていることを確認してください> FILENAME "_out"
。
これら2つのスクリプトの機能を正確に知らない限り、これより具体的に説明することはできませんawk
。
答え3
コマンドは次のようにする必要があります。
for f in a*.dat; do
awk '.....' "$f" > "${f}_out"
done
出力はこのようにする必要があります。それ以外の場合、シェルは変数を解釈しようとします。
f_out