2013-03-22 66 views
1

我正在使用awk重新格式化文件中的某些字段,並且使用awk函數修復一個字段值(如果它爲負值)。這裏是我的awk命令:爲什麼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最後一行(包含多行數據)。

感謝您的幫助。

+0

除非您使用的是C shell衍生產品,否則反斜槓是不必要的。 shell知道單引號字符串還在繼續,因爲它還沒有看到第二個單引號。 – 2013-03-22 16:54:20

回答

3

試試這個:

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

在你的程序中,你只是因爲你把你的打印語句在END{..}塊得到最後一行數據。整個文件被處理後觸發,而不是每行。刪除END,它會按照你的意圖工作。

+0

太棒了。它完美的作品。感謝您的解釋和想法。 – geoweaser 2013-03-22 15:00:14

相關問題