1

私はawkを使用してファイル内のいくつかのフィールドを再フォーマットし、awk関数を使用して1つのフィールド値が負の場合に修正しています。これが私のawkコマンドです:

awk 'function fix_neg(value) {\
if(value < 0)\
return '$new_value'\
else\
return value\
} END { print $2,$1,fix_neg($3) }' input_file.txt

ここで、$new_valueはこの呼び出しの前に設定されました。これがinput_file.txtの再フォーマットされた最後の行(複数行のデータを含む)のみを返す理由がわかりません。

ご協力いただきありがとうございます。

4

1 に答える 1

3

これを試して:

awk -v newV="$new_value" '{print $2,$1,($3<0?newV:$3)}' inputfile

プログラムでは、printステートメントをEND{..}ブロックに配置したため、最後の行のデータのみを取得しました。各行ではなく、ファイル全体が処理された後にトリガーされます。をドロップするENDと、意図したとおりに機能します。

于 2013-03-22T14:29:04.603 に答える