【问题标题】:Remove all Leading zero from first column and if all zero found then Preserved 1 zero从第一列中删除所有前导零,如果找到所有零,则保留 1 个零
【发布时间】:2019-06-19 07:18:58
【问题描述】:

我想从第一列中删除前导零,如果在第一列中找到所有零,则应保留 1 个零。

00123|a 
00154|b 
00000|c

输出

123|a 
154|b 
0|c

【问题讨论】:

  • 用什么代码来做这个的,请补充
  • 我正在使用 sed s/^0*(\d+)$/$1/ 但通过此代码,所有零都被删除,如果找到所有零,我想保留一个零。

标签: unix scripting sh


【解决方案1】:

如果你想使用 sed:

sed 's/^0*//;s/^|/0|/' infile

【讨论】:

    【解决方案2】:

    使用 awk:

    $ awk '
    BEGIN { FS=OFS="|" }  # set field separators
    { $1+=0 }             # add a zero to remove leading zeros
    1' file               # output
    

    输出:

    123|a 
    154|b 
    0|c
    

    这是一个适用于整数的方法:

    $ awk '
    BEGIN{ FS=OFS="|" }
    { $1=sprintf("%.0f",$1) }  # %.0f will round off decimals
    1' file
    

    输出:

    123|a 
    154|b 
    0|c
    4295229012|0
    

    【讨论】:

    • 上面的代码工作正常,如果第一个数字小于 11 位,我有一个像 004295229012|0 这样的数字将使用上面的代码转换为 4.29523e+09|0。
    【解决方案3】:

    试试

    string="0000123456000" 
    echo $((10#$string))
    

    【讨论】:

    • 它正在工作,但我有一个包含 n 条记录的文件。我只想在第一列执行上述操作
    • column 你的意思是“00123|a”而不是“00123 a”?
    • 我有一个管道分隔文件,我想只从第一列引导零,并且只有零,然后应该保留一个零。 00123|a 将是 123|a 和 00000|b 将是 0|b
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-30
    • 2019-12-09
    • 1970-01-01
    • 2014-04-01
    • 2019-02-14
    相关资源
    最近更新 更多