2015-11-05 149 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