2015-11-05 148 views
1

得到錯誤我有很多缺失值數據集9999,9000等部分數據是在AWK打印

input.txt 
30 
9999 
10 
40 
23 
44 
9000 
9999 
31 
. 
. 

我想用以下標準打印同一列。

if $1 < 9000 then no change, else $1+100 

慾望輸出

ofile.txt 
130 
9999 
110 
140 
123 
144 
9000 
9999 
131 
. 
. 

我是用下面的嘗試,但無法成功。

awk 'if ($1<9000) {printf "%7s\n", $+100}' input.txt 

回答

3
awk '{if ($1<9000) $1=$1+100; printf "%-7s\n", $1}' input.txt 
130  
9999 
110  
140  
123  
144  
9000 
9999 
131  

工作原理:

  • if ($1<9000) $1=$1+100

    如果在第一列數少於9000,則100被添加到它。

  • printf "%-7s\n", $1

    的新號碼,不管是什麼,在格式%-7s打印出來。

    您的示例代碼使用%7s這將產生右對齊的輸出。相反,您所需的輸出是左對齊的。這就是爲什麼我改變格式爲%-7s

如果你不感興趣的特殊格式的字符串,那麼代碼可以簡化爲(帽尖:jaypal辛格):

awk '$1<9000{$1+=100}1' input.txt 
+0

會不會'的awk「$ 1 <9000 {$ 1 + = 100} 1'文件'就足夠了,或者可能是我錯過了什麼? –

+1

@jaypalsingh除非OP確實需要'7s'格式,那麼,是的,這是行得通的:添加到答案中。謝謝。 – John1024