【问题标题】:Compare size of each cell in Unix Scripting比较 Unix 脚本中每个单元格的大小
【发布时间】:2017-04-11 08:03:54
【问题描述】:

我想比较每个单元格的大小/长度并根据其长度更改其内容。

当前表格的格式

AB
CD
AB
AB
CD
155668/01
AB
1233/10

我想将长度超过“2”的单元格替换为 DE。

输出

AB
CD
AB
AB
CD
DE
AB
DE

我试过了

awk -F "," '{ if($(#1) > "2") {print "DE"} else {print $1 }}'

它说语法错误。 如果我使用wc -m,如果$(#,则输出与输入相同。

【问题讨论】:

    标签: unix awk scripting string-length


    【解决方案1】:

    最简单的方法是使用sed

    sed '/^..$/!s/.*/DE/' file
    

    awk,你可以说:

    awk '!/^..$/ { $0 = "DE" } 1' file
    

    在这两种情况下,想法是相同的:如果该行不完全由两个字符组成,则将整行替换为DE。对于sed,整行是.*,对于awk,整行是$0

    【讨论】:

    • 两者都运行良好。谢谢你。你能解释一下代码吗?
    【解决方案2】:

    试试这个 -

    $ awk '{print (length($1)>2?"DE":$1)}' f
    AB
    CD
    AB
    AB
    CD
    DE
    AB
    DE
    

    【讨论】:

      【解决方案3】:

      惯用的方式是:

      awk 'length($1) > 2 { $1 = "DE" } 1'
      

      【讨论】:

      • 您的意思是分配给$1吗?
      • @MichaelVehrs:是的,谢谢。下次只需进行编辑 :-)
      猜你喜欢
      • 2010-12-06
      • 1970-01-01
      • 2017-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-10
      相关资源
      最近更新 更多