【问题标题】:Getting error in awk Print在 awk 打印中出现错误
【发布时间】:2015-11-05 13:28:46
【问题描述】:

我有一个包含许多缺失值的数据集,如 9999、9000 等。部分数据是

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

【问题讨论】:

    标签: awk


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

    它是如何工作的:

    • if ($1&lt;9000) $1=$1+100

      如果第一列中的数字小于 9000,则添加 100。

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

      无论新号码是什么,都以%-7s 格式打印出来。

      您的示例代码使用了%7s,这将产生右对齐输出。相比之下,您想要的输出是左对齐的。这就是为什么我将格式改为%-7s

    如果你对特殊格式的字符串不感兴趣,那么代码可以简化为(帽子提示:jaypal singh):

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

    【讨论】:

    • awk '$1&lt;9000{$1+=100}1' file 不够用还是我错过了什么?
    • @jaypalsingh 除非 OP 确实需要 7s 格式,否则,是的,这行得通:添加到答案中。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2014-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-10
    • 1970-01-01
    • 2015-11-29
    • 1970-01-01
    相关资源
    最近更新 更多